diff --git a/CONTRIBUTORS b/CONTRIBUTORS index 5f2087c7..304be837 100644 --- a/CONTRIBUTORS +++ b/CONTRIBUTORS @@ -709,6 +709,8 @@ Oliver Endriss for suggesting to eliminate MAXDVBDEVICES for reporting that there are channels that need even more than 10 TS packets in order to detect the frame type + for suggesting to ignore channels with an RID that is not 0 when checking for obsolete + channels Reinhard Walter Buchner for adding some satellites to 'sources.conf' @@ -1183,6 +1185,9 @@ Rolf Ahrenberg existing edited version of a recording for adding code for parsing LCN and AVC descriptors to libsi for fixing clearing non-editable members in the channel editor + for reporting a problem with adding new source types in case they are already + registered + for adding support for "Pilot", "T2-System-Id" and "SISO/MISO" parameters Ralf Klueber for reporting a bug in cutting a recording if there is only a single editing mark @@ -2515,6 +2520,7 @@ Antti Hartikainen for updating 'S13E' in 'sources.conf' for adding maximum SNR value for PCTV Systems nanoStick T2 290e for updating 'sources.conf' + for translating OSD texts to the Finnish language Bernd Melcher for reporting a problem with the 'servicedemo' plugin having no PLUGIN macro @@ -2917,7 +2923,7 @@ Luis Fernandes for suggesting to add handling MPEG audio type "ISO/IEC 14496-3 Audio with LATM transport syntax" -Christopher Reimer +Christopher Reimer for reporting a problem with external Dolby Digital processing via the '-a' option in live mode and with TS recordings for contributing to a patch that implements FHS support @@ -2929,6 +2935,7 @@ Christopher Reimer VDR source directory when doing "make plugins" for reverting the change from version 1.5.7 that made all logging go to LOG_ERR for reporting a possible crash in the OSD demo + for adding support for systemd Stefan Huskamp for suggesting to make entering characters via the number keys @@ -3141,6 +3148,8 @@ S for pointing out that FindHeader() can also be used in cMpeg2Fixer::AdjTref() for reporting a problem with detecting user inactivity in case the system time is changed after VDR has been started + for reporting that the change "Fixed some compiler warnings with Clang 3.4.1" caused + ci.c to no longer compile with older versions of gcc Peter Mnster for fixing 'make install' to not overwrite existing configuration files @@ -3271,3 +3280,7 @@ Tony Houghton warning with Clang 3.4.1 for suggesting to replace the NULL pointer assignment in ~cReceiver() to force a segfault with a call to abort() + +Christian Winkler + for reporting a problem with transfer mode on full featured DVB cards for encrypted + channels that have no audio pid diff --git a/HISTORY b/HISTORY index 09ad53bd..c2ebc46d 100644 --- a/HISTORY +++ b/HISTORY @@ -8202,3 +8202,61 @@ Video Disk Recorder Revision History - Fixed the replay progress display for very long recordings. - Fixed detecting broken video data streams when recording. - Fixed handling frame detection buffer length (reported by Eike Sauer). + +2014-03-16: Version 2.1.6 + +- Revoked "Fixed some compiler warnings with Clang 3.4.1" from ci.c, because this + did not compile with older versions of gcc (thanks to Sren Moch). +- Fixed keeping the current position in the Recordings menu if a recording was + deleted in a sub folder. +- Fixed handling transfer mode on full featured DVB cards for encrypted channels + that have no audio pid (reported by Christian Winkler). +- Fixed a possible endless loop in cH264Parser::GetGolombUe(), which caused recordings + on some HD channels to get stuck and resulted in buffer overflows. +- Fixed handling PAT packets when detecting frames, so that they can be properly + taken into account when regenerating the index of a recording. +- Fixed adding new source types in case they are already registered (reported by Rolf + Ahrenberg). +- Removed an unnecessary assignment from cMenuRecordings::~cMenuRecordings(). +- The Recordings menu now remembers the last recording the cursor was positioned on, + independent of the last replayed recording. When a replay ends, however, the cursor + will initially be positioned to the last replayed recording again when the menu + is opened. +- Updated the Finnish OSD texts (thanks to Antti Hartikainen). +- Fixed drawing the live indicator in the LCARS skin in case there are no devices. +- When checking for obsolete channels, those with an RID that is not 0 are now + ignored (suggested by Oliver Endriss). +- The SDT is now only parsed *after* the NIT has been read, and it explicitly uses + the source value derived from the NIT. This should prevent new channels from being + created with the wrong source. +- Added a log message in case a receiver is detached from its device because the + assigned CAM can't decrypt the channel. +- Refactored setup parameter handling for output devices: + + The function cDevice::GetVideoSystem() has been deprecated and will be removed + in a future version. In order to check whether a particular plugin needs to be + modified if this function is removed, you can comment out the line + #define DEPRECATED_VIDEOSYSTEM + in device.h. + + Handling the "video (display) format" (things like 16:9, 4:3, pan&scan, letterbox + etc) shall now be done by the individual output devices, because the types and + numbers of parameters are too device specific. The Setup/DVB parameters + "Video format" and "Video display format" are still there for now and can be used + by SD devices. HD devices, however, shall not use these parameters (any more), + but rather implement their own setup menu with the necessary parameters for + controlling output. + + The dvbhdffdevice plugin has been modified accordingly. + + Made it clear that cDevice::SetDigitalAudioDevice() merely tells the output device + that the current audio track is Dolby Digital. This function was only used by the + original "full featured" DVB cards - do not use it for new developments! + If an output device has several ways of replaying audio (like HDMI or analog jack) + it shall implement the proper options in its plugin's SetupMenu() function. +- Added support for "Pilot", "T2-System-Id" and "SISO/MISO" parameters (thanks to + Rolf Ahrenberg). +- Now initializing the isOnVideoDirectoryFileSystem member of cRecording when + scanning the video directory, so that it won't cause a delay when opening the menu + on a system with a large number of recordings. +- Now resetting the isOnVideoDirectoryFileSystem member of a cRecording to -1 after + renaming it, so that it will be re-checked upon the next call to + IsOnVideoDirectoryFileSystem(). +- Added support for systemd (thanks to Christopher Reimer). To activate this you + need to add "SDNOTIFY=1" to the 'make' call. diff --git a/MANUAL b/MANUAL index 9f2fef1d..83f16b9e 100644 --- a/MANUAL +++ b/MANUAL @@ -731,13 +731,13 @@ Version 2.0 1 = ANSI/SCTE Video format = 4:3 The video format (or aspect ratio) of the tv set in use - (4:3 or 16:9). + (4:3 or 16:9). Applies only to SD output devices. Video display format = letterbox The display format to use for playing wide screen video on a 4:3 tv set ("pan & scan", "letterbox" or "center cut out"). This option is only available if "Video format" is set to - 4:3. + 4:3. Applies only to SD output devices. Use Dolby Digital = yes Controls whether Dolby Digital tracks appear in the "Audio" diff --git a/Makefile b/Makefile index eccec7f5..0d3a8fc3 100644 --- a/Makefile +++ b/Makefile @@ -4,7 +4,7 @@ # See the main source file 'vdr.c' for copyright information and # how to reach the author. # -# $Id: Makefile 3.1 2013/04/14 12:18:08 kls Exp $ +# $Id: Makefile 3.2 2014/03/16 12:47:35 kls Exp $ .DELETE_ON_ERROR: @@ -93,6 +93,11 @@ INCLUDES += $(shell pkg-config --cflags fribidi) DEFINES += -DBIDI LIBS += $(shell pkg-config --libs fribidi) endif +ifdef SDNOTIFY +INCLUDES += $(shell pkg-config --cflags libsystemd-daemon) +DEFINES += -DSDNOTIFY +LIBS += $(shell pkg-config --libs libsystemd-daemon) +endif LIRC_DEVICE ?= /var/run/lirc/lircd diff --git a/PLUGINS/src/dvbhddevice/HISTORY b/PLUGINS/src/dvbhddevice/HISTORY index 626d001f..b26b0c48 100644 --- a/PLUGINS/src/dvbhddevice/HISTORY +++ b/PLUGINS/src/dvbhddevice/HISTORY @@ -93,3 +93,8 @@ VDR Plugin 'dvbhddevice' Revision History 2014-01-17: Version 2.1.4 - Using PCR based clock recovery in transfer mode. + +2014-03-15: Version 2.1.6 + +- The function cDevice::GetVideoSystem() has been deprecated. +- Removed old-style video format setting functions. diff --git a/PLUGINS/src/dvbhddevice/dvbhddevice.c b/PLUGINS/src/dvbhddevice/dvbhddevice.c index b00f53a2..045b0a9d 100644 --- a/PLUGINS/src/dvbhddevice/dvbhddevice.c +++ b/PLUGINS/src/dvbhddevice/dvbhddevice.c @@ -10,7 +10,7 @@ #include "menu.h" #include "setup.h" -static const char *VERSION = "2.1.5"; +static const char *VERSION = "2.1.6"; static const char *DESCRIPTION = trNOOP("HD Full Featured DVB device"); static const char *MAINMENUENTRY = "dvbhddevice"; diff --git a/PLUGINS/src/dvbhddevice/dvbhdffdevice.c b/PLUGINS/src/dvbhddevice/dvbhdffdevice.c index fd1fb036..9c68e149 100644 --- a/PLUGINS/src/dvbhddevice/dvbhdffdevice.c +++ b/PLUGINS/src/dvbhddevice/dvbhdffdevice.c @@ -108,8 +108,16 @@ cDvbHdFfDevice::~cDvbHdFfDevice() void cDvbHdFfDevice::MakePrimaryDevice(bool On) { - if (On) + if (On) { new cHdffOsdProvider(mHdffCmdIf); + //TODO the same code is also used in cHdffSetupPage::Store() and cHdffMenu::SetVideoConversion() - combine? + HdffVideoFormat_t videoFormat; + videoFormat.AutomaticEnabled = true; + videoFormat.AfdEnabled = false; + videoFormat.TvFormat = (HdffTvFormat_t) gHdffSetup.TvFormat; + videoFormat.VideoConversion = (HdffVideoConversion_t) gHdffSetup.VideoConversion; + mHdffCmdIf->CmdAvSetVideoFormat(0, &videoFormat); + } cDvbDevice::MakePrimaryDevice(On); } @@ -235,37 +243,6 @@ uchar *cDvbHdFfDevice::GrabImage(int &Size, bool Jpeg, int Quality, int SizeX, i return result; } -void cDvbHdFfDevice::SetVideoDisplayFormat(eVideoDisplayFormat VideoDisplayFormat) -{ - //TODO??? - cDevice::SetVideoDisplayFormat(VideoDisplayFormat); -} - -void cDvbHdFfDevice::SetVideoFormat(bool VideoFormat16_9) -{ - HdffVideoFormat_t videoFormat; - videoFormat.AutomaticEnabled = true; - videoFormat.AfdEnabled = false; - videoFormat.TvFormat = (HdffTvFormat_t) gHdffSetup.TvFormat; - videoFormat.VideoConversion = (HdffVideoConversion_t) gHdffSetup.VideoConversion; - mHdffCmdIf->CmdAvSetVideoFormat(0, &videoFormat); -} - -eVideoSystem cDvbHdFfDevice::GetVideoSystem(void) -{ - eVideoSystem VideoSystem = vsPAL; - if (fd_video >= 0) { - video_size_t vs; - if (ioctl(fd_video, VIDEO_GET_SIZE, &vs) == 0) { - if (vs.h == 480 || vs.h == 240) - VideoSystem = vsNTSC; - } - else - LOG_ERROR; - } - return VideoSystem; -} - void cDvbHdFfDevice::GetVideoSize(int &Width, int &Height, double &VideoAspect) { if (fd_video >= 0) { @@ -383,8 +360,8 @@ bool cDvbHdFfDevice::SetChannelDevice(const cChannel *Channel, bool LiveView) bool DoTune = !IsTunedToTransponder(Channel); - bool pidHandlesVideo = pidHandles[ptVideo].pid == vpid; - bool pidHandlesAudio = pidHandles[ptAudio].pid == apid; + bool pidHandlesVideo = vpid && pidHandles[ptVideo].pid == vpid; + bool pidHandlesAudio = apid && pidHandles[ptAudio].pid == apid; bool TurnOffLivePIDs = DoTune || !IsPrimaryDevice() @@ -443,11 +420,6 @@ void cDvbHdFfDevice::SetVolumeDevice(int Volume) mHdffCmdIf->CmdMuxSetVolume(Volume * 100 / 255); } -void cDvbHdFfDevice::SetDigitalAudioDevice(bool On) -{ - // not needed -} - void cDvbHdFfDevice::SetAudioTrackDevice(eTrackType Type) { //printf("SetAudioTrackDevice %d\n", Type); diff --git a/PLUGINS/src/dvbhddevice/dvbhdffdevice.h b/PLUGINS/src/dvbhddevice/dvbhdffdevice.h index 146958f2..eb3634bd 100644 --- a/PLUGINS/src/dvbhddevice/dvbhdffdevice.h +++ b/PLUGINS/src/dvbhddevice/dvbhdffdevice.h @@ -51,9 +51,6 @@ public: // Video format facilities public: - virtual void SetVideoDisplayFormat(eVideoDisplayFormat VideoDisplayFormat); - virtual void SetVideoFormat(bool VideoFormat16_9); - virtual eVideoSystem GetVideoSystem(void); virtual void GetVideoSize(int &Width, int &Height, double &VideoAspect); virtual void GetOsdSize(int &Width, int &Height, double &PixelAspect); @@ -70,7 +67,6 @@ protected: virtual int GetAudioChannelDevice(void); virtual void SetAudioChannelDevice(int AudioChannel); virtual void SetVolumeDevice(int Volume); - virtual void SetDigitalAudioDevice(bool On); // Player facilities diff --git a/PLUGINS/src/dvbsddevice/HISTORY b/PLUGINS/src/dvbsddevice/HISTORY index 1dcd561b..94e31ddb 100644 --- a/PLUGINS/src/dvbsddevice/HISTORY +++ b/PLUGINS/src/dvbsddevice/HISTORY @@ -55,3 +55,7 @@ VDR Plugin 'dvbsddevice' Revision History - Avoiding unnecessary pkg-config warnings in plugin Makefiles. - cDevice::TrickSpeed() now has an additional parameter named Forward. + +2014-03-15: Version 2.1.2 + +- The function cDevice::GetVideoSystem() has been deprecated. diff --git a/PLUGINS/src/dvbsddevice/dvbsddevice.c b/PLUGINS/src/dvbsddevice/dvbsddevice.c index 39b140d7..0d06f17d 100644 --- a/PLUGINS/src/dvbsddevice/dvbsddevice.c +++ b/PLUGINS/src/dvbsddevice/dvbsddevice.c @@ -3,14 +3,14 @@ * * See the README file for copyright information and how to reach the author. * - * $Id: dvbsddevice.c 3.2 2014/01/01 13:43:28 kls Exp $ + * $Id: dvbsddevice.c 3.3 2014/03/15 12:28:14 kls Exp $ */ #include #include #include "dvbsdffdevice.h" -static const char *VERSION = "2.1.1"; +static const char *VERSION = "2.1.2"; static const char *DESCRIPTION = "SD Full Featured DVB device"; class cPluginDvbsddevice : public cPlugin { diff --git a/PLUGINS/src/dvbsddevice/dvbsdffdevice.c b/PLUGINS/src/dvbsddevice/dvbsdffdevice.c index a735e920..5711e04d 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 3.1 2014/01/01 13:39:24 kls Exp $ + * $Id: dvbsdffdevice.c 3.3 2014/03/15 12:35:21 kls Exp $ */ #include "dvbsdffdevice.h" @@ -241,21 +241,6 @@ void cDvbSdFfDevice::SetVideoFormat(bool VideoFormat16_9) SetVideoDisplayFormat(eVideoDisplayFormat(Setup.VideoDisplayFormat)); } -eVideoSystem cDvbSdFfDevice::GetVideoSystem(void) -{ - eVideoSystem VideoSystem = vsPAL; - if (fd_video >= 0) { - video_size_t vs; - if (ioctl(fd_video, VIDEO_GET_SIZE, &vs) == 0) { - if (vs.h == 480 || vs.h == 240) - VideoSystem = vsNTSC; - } - else - LOG_ERROR; - } - return VideoSystem; -} - void cDvbSdFfDevice::GetVideoSize(int &Width, int &Height, double &VideoAspect) { if (fd_video >= 0) { @@ -400,8 +385,8 @@ bool cDvbSdFfDevice::SetChannelDevice(const cChannel *Channel, bool LiveView) bool DoTune = !IsTunedToTransponder(Channel); - bool pidHandlesVideo = pidHandles[ptVideo].pid == vpid; - bool pidHandlesAudio = pidHandles[ptAudio].pid == apid; + bool pidHandlesVideo = vpid && pidHandles[ptVideo].pid == vpid; + bool pidHandlesAudio = apid && pidHandles[ptAudio].pid == apid; bool TurnOffLivePIDs = DoTune || !IsPrimaryDevice() diff --git a/PLUGINS/src/dvbsddevice/dvbsdffdevice.h b/PLUGINS/src/dvbsddevice/dvbsdffdevice.h index fe66d32a..f7348d0f 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 3.1 2014/01/01 13:39:30 kls Exp $ + * $Id: dvbsdffdevice.h 3.2 2014/03/15 12:36:35 kls Exp $ */ #ifndef __DVBSDFFDEVICE_H @@ -63,7 +63,6 @@ public: public: virtual void SetVideoDisplayFormat(eVideoDisplayFormat VideoDisplayFormat); virtual void SetVideoFormat(bool VideoFormat16_9); - virtual eVideoSystem GetVideoSystem(void); virtual void GetVideoSize(int &Width, int &Height, double &VideoAspect); virtual void GetOsdSize(int &Width, int &Height, double &PixelAspect); diff --git a/channels.c b/channels.c index 11367c7b..b0e24743 100644 --- a/channels.c +++ b/channels.c @@ -4,7 +4,7 @@ * See the main source file 'vdr.c' for copyright information and * how to reach the author. * - * $Id: channels.c 3.4 2014/01/04 15:01:52 kls Exp $ + * $Id: channels.c 3.5 2014/03/10 13:14:02 kls Exp $ */ #include "channels.h" @@ -1039,7 +1039,7 @@ cChannel *cChannels::NewChannel(const cChannel *Transponder, const char *Name, c void cChannels::MarkObsoleteChannels(int Source, int Nid, int Tid) { for (cChannel *channel = First(); channel; channel = Next(channel)) { - if (time(NULL) - channel->Seen() > CHANNELTIMEOBSOLETE && channel->Source() == Source && channel->Nid() == Nid && channel->Tid() == Tid) { + if (time(NULL) - channel->Seen() > CHANNELTIMEOBSOLETE && channel->Source() == Source && channel->Nid() == Nid && channel->Tid() == Tid && channel->Rid() == 0) { if (!endswith(channel->Name(), CHANNELMARKOBSOLETE)) channel->SetName(cString::sprintf("%s %s", channel->Name(), CHANNELMARKOBSOLETE), channel->ShortName(), cString::sprintf("%s %s", CHANNELMARKOBSOLETE, channel->Provider())); } diff --git a/ci.c b/ci.c index 1a171b14..6b0805d7 100644 --- a/ci.c +++ b/ci.c @@ -4,7 +4,7 @@ * See the main source file 'vdr.c' for copyright information and * how to reach the author. * - * $Id: ci.c 3.11 2014/02/08 12:25:55 kls Exp $ + * $Id: ci.c 3.12 2014/02/25 09:59:55 kls Exp $ */ #include "ci.h" @@ -864,7 +864,7 @@ void cCiDateTime::SendDateTime(void) #pragma pack(1) struct tTime { uint16_t mjd; uint8_t h, m, s; short offset; }; #pragma pack() - tTime T = { .mjd = htons(MJD), .h = DEC2BCD(tm_gmt.tm_hour), .m = DEC2BCD(tm_gmt.tm_min), .s = DEC2BCD(tm_gmt.tm_sec), .offset = short(htons(tm_loc.tm_gmtoff / 60)) }; + tTime T = { mjd : htons(MJD), h : DEC2BCD(tm_gmt.tm_hour), m : DEC2BCD(tm_gmt.tm_min), s : DEC2BCD(tm_gmt.tm_sec), offset : short(htons(tm_loc.tm_gmtoff / 60)) }; bool OldDumpTPDUDataTransfer = DumpTPDUDataTransfer; DumpTPDUDataTransfer &= DumpDateTime; if (DumpDateTime) @@ -1004,7 +1004,7 @@ void cCiMMI::Process(int Length, const uint8_t *Data) case DCC_SET_MMI_MODE: if (l == 2 && *++d == MM_HIGH_LEVEL) { struct tDisplayReply { uint8_t id; uint8_t mode; }; - tDisplayReply dr = { .id = DRI_MMI_MODE_ACK, .mode = MM_HIGH_LEVEL }; + tDisplayReply dr = { id : DRI_MMI_MODE_ACK, mode : MM_HIGH_LEVEL }; dbgprotocol("Slot %d: ==> Display Reply (%d)\n", Tc()->CamSlot()->SlotNumber(), SessionId()); SendData(AOT_DISPLAY_REPLY, 2, (uint8_t *)&dr); } diff --git a/config.h b/config.h index 1d2a8a97..d3654386 100644 --- a/config.h +++ b/config.h @@ -4,7 +4,7 @@ * See the main source file 'vdr.c' for copyright information and * how to reach the author. * - * $Id: config.h 3.7 2014/01/26 12:31:58 kls Exp $ + * $Id: config.h 3.8 2014/02/25 10:00:23 kls Exp $ */ #ifndef __CONFIG_H @@ -22,13 +22,13 @@ // VDR's own version number: -#define VDRVERSION "2.1.5" -#define VDRVERSNUM 20105 // Version * 10000 + Major * 100 + Minor +#define VDRVERSION "2.1.6" +#define VDRVERSNUM 20106 // Version * 10000 + Major * 100 + Minor // The plugin API's version number: -#define APIVERSION "2.1.5" -#define APIVERSNUM 20105 // Version * 10000 + Major * 100 + Minor +#define APIVERSION "2.1.6" +#define APIVERSNUM 20106 // 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 diff --git a/device.c b/device.c index 901fa2b3..43bc0e08 100644 --- a/device.c +++ b/device.c @@ -4,7 +4,7 @@ * See the main source file 'vdr.c' for copyright information and * how to reach the author. * - * $Id: device.c 3.12 2014/02/18 13:12:39 kls Exp $ + * $Id: device.c 3.15 2014/03/15 13:23:28 kls Exp $ */ #include "device.h" @@ -430,11 +430,6 @@ void cDevice::SetVideoFormat(bool VideoFormat16_9) { } -eVideoSystem cDevice::GetVideoSystem(void) -{ - return vsPAL; -} - void cDevice::GetVideoSize(int &Width, int &Height, double &VideoAspect) { Width = 0; @@ -575,7 +570,7 @@ void cDevice::StartSectionHandler(void) AttachFilter(eitFilter = new cEitFilter); AttachFilter(patFilter = new cPatFilter); AttachFilter(sdtFilter = new cSdtFilter(patFilter)); - AttachFilter(nitFilter = new cNitFilter); + AttachFilter(nitFilter = new cNitFilter(sdtFilter)); } } @@ -1608,6 +1603,7 @@ void cDevice::Action(void) for (int i = 0; i < MAXRECEIVERS; i++) { if (receiver[i] && receiver[i]->WantsPid(Pid)) { if (DetachReceivers) { + dsyslog("detaching receiver - won't decrypt channel %s with CAM %d", *receiver[i]->ChannelID().ToString(), CamSlotNumber); ChannelCamRelations.SetChecked(receiver[i]->ChannelID(), CamSlotNumber); Detach(receiver[i]); } diff --git a/device.h b/device.h index 368d5cfa..549bbe04 100644 --- a/device.h +++ b/device.h @@ -4,7 +4,7 @@ * See the main source file 'vdr.c' for copyright information and * how to reach the author. * - * $Id: device.h 3.8 2014/01/02 10:47:08 kls Exp $ + * $Id: device.h 3.9 2014/03/15 14:04:58 kls Exp $ */ #ifndef __DEVICE_H @@ -55,9 +55,12 @@ enum ePlayMode { pmNone, // audio/video from decoder // KNOWN TO YOUR PLAYER. }; +#define DEPRECATED_VIDEOSYSTEM +#ifdef DEPRECATED_VIDEOSYSTEM enum eVideoSystem { vsPAL, vsNTSC }; +#endif enum eVideoDisplayFormat { vdfPanAndScan, vdfLetterBox, @@ -462,12 +465,19 @@ public: ///< Sets the video display format to the given one (only useful ///< if this device has an MPEG decoder). ///< A derived class must first call the base class function! + ///< NOTE: this is only for SD devices. HD devices shall implement their + ///< own setup menu with the necessary parameters for controlling output. virtual void SetVideoFormat(bool VideoFormat16_9); ///< Sets the output video format to either 16:9 or 4:3 (only useful ///< if this device has an MPEG decoder). - virtual eVideoSystem GetVideoSystem(void); + ///< NOTE: this is only for SD devices. HD devices shall implement their + ///< own setup menu with the necessary parameters for controlling output. +#ifdef DEPRECATED_VIDEOSYSTEM + virtual eVideoSystem GetVideoSystem(void) { return vsPAL; } ///< Returns the video system of the currently displayed material ///< (default is PAL). + ///< This function is deprecated and will be removed in a future version! +#endif virtual void GetVideoSize(int &Width, int &Height, double &VideoAspect); ///< Returns the Width, Height and VideoAspect ratio of the currently ///< displayed video material. Width and Height are given in pixel @@ -566,8 +576,9 @@ protected: virtual void SetVolumeDevice(int Volume); ///< Sets the audio volume on this device (Volume = 0...255). virtual void SetDigitalAudioDevice(bool On); - ///< Tells the actual device that digital audio output shall be switched - ///< on or off. + ///< Tells the output device that the current audio track is Dolby Digital. + ///< Only used by the original "full featured" DVB cards - do not use for new + ///< developments! public: bool IsMute(void) const { return mute; } bool ToggleMute(void); diff --git a/dvbdevice.c b/dvbdevice.c index 6d1c9562..fb406f1a 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 3.10 2014/01/20 11:46:26 kls Exp $ + * $Id: dvbdevice.c 3.11 2014/03/16 10:38:31 kls Exp $ */ #include "dvbdevice.h" @@ -36,6 +36,13 @@ static int DvbApiVersion = 0x0000; // the version of the DVB driver actually in // --- DVB Parameter Maps ---------------------------------------------------- +const tDvbParameterMap PilotValues[] = { + { 0, PILOT_OFF, trNOOP("off") }, + { 1, PILOT_ON, trNOOP("on") }, + { 999, PILOT_AUTO, trNOOP("auto") }, + { -1, 0, NULL } + }; + const tDvbParameterMap InversionValues[] = { { 0, INVERSION_OFF, trNOOP("off") }, { 1, INVERSION_ON, trNOOP("on") }, @@ -206,6 +213,9 @@ cDvbTransponderParameters::cDvbTransponderParameters(const char *Parameters) hierarchy = HIERARCHY_AUTO; rollOff = ROLLOFF_AUTO; streamId = 0; + t2systemId = 0; + sisoMiso = 0; + pilot = PILOT_AUTO; Parse(Parameters); } @@ -227,10 +237,13 @@ cString cDvbTransponderParameters::ToString(char Type) const ST(" T*") q += PrintParameter(q, 'G', MapToUser(guard, GuardValues)); ST("ACST*") q += PrintParameter(q, 'I', MapToUser(inversion, InversionValues)); ST("ACST*") q += PrintParameter(q, 'M', MapToUser(modulation, ModulationValues)); + ST(" S 2") q += PrintParameter(q, 'N', MapToUser(pilot, PilotValues)); ST(" S 2") q += PrintParameter(q, 'O', MapToUser(rollOff, RollOffValues)); ST(" ST2") q += PrintParameter(q, 'P', streamId); + ST(" T2") q += PrintParameter(q, 'Q', t2systemId); ST(" ST*") q += PrintParameter(q, 'S', MapToUser(system, SystemValuesSat)); // we only need the numerical value, so Sat or Terr doesn't matter ST(" T*") q += PrintParameter(q, 'T', MapToUser(transmission, TransmissionValues)); + ST(" T2") q += PrintParameter(q, 'X', sisoMiso); ST(" T*") q += PrintParameter(q, 'Y', MapToUser(hierarchy, HierarchyValues)); return buffer; } @@ -263,12 +276,15 @@ bool cDvbTransponderParameters::Parse(const char *s) case 'I': s = ParseParameter(s, inversion, InversionValues); break; case 'L': polarization = 'L'; s++; break; case 'M': s = ParseParameter(s, modulation, ModulationValues); break; + case 'N': s = ParseParameter(s, pilot, PilotValues); break; case 'O': s = ParseParameter(s, rollOff, RollOffValues); break; case 'P': s = ParseParameter(s, streamId); break; + case 'Q': s = ParseParameter(s, t2systemId); break; case 'R': polarization = 'R'; s++; break; case 'S': s = ParseParameter(s, system, SystemValuesSat); break; // we only need the numerical value, so Sat or Terr doesn't matter case 'T': s = ParseParameter(s, transmission, TransmissionValues); break; case 'V': polarization = 'V'; s++; break; + case 'X': s = ParseParameter(s, sisoMiso); break; case 'Y': s = ParseParameter(s, hierarchy, HierarchyValues); break; default: esyslog("ERROR: unknown parameter key '%c'", *s); return false; @@ -839,7 +855,7 @@ bool cDvbTuner::SetFrontend(void) SETCMD(DTV_INVERSION, dtp.Inversion()); if (frontendType == SYS_DVBS2) { // DVB-S2 - SETCMD(DTV_PILOT, PILOT_AUTO); + SETCMD(DTV_PILOT, dtp.Pilot()); SETCMD(DTV_ROLLOFF, dtp.RollOff()); if (DvbApiVersion >= 0x0508) SETCMD(DTV_STREAM_ID, dtp.StreamId()); @@ -1038,6 +1054,9 @@ cOsdItem *cDvbSourceParam::GetOsdItem(void) case 10: ST(" T") return new cMenuEditMapItem( tr("Hierarchy"), &dtp.hierarchy, HierarchyValues); else return GetOsdItem(); case 11: ST(" S ") return new cMenuEditMapItem( tr("Rolloff"), &dtp.rollOff, RollOffValues); else return GetOsdItem(); case 12: ST(" ST") return new cMenuEditIntItem( tr("StreamId"), &dtp.streamId, 0, 255); else return GetOsdItem(); + case 13: ST(" S ") return new cMenuEditMapItem( tr("Pilot"), &dtp.pilot, PilotValues); else return GetOsdItem(); + case 14: ST(" T") return new cMenuEditIntItem( tr("T2SystemId"), &dtp.t2systemId, 0, 65535); else return GetOsdItem(); + case 15: ST(" T") return new cMenuEditIntItem( tr("SISO/MISO"), &dtp.sisoMiso, 0, 1); else return GetOsdItem(); default: return NULL; } return NULL; diff --git a/dvbdevice.h b/dvbdevice.h index 278edd0c..0a148ce3 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 3.4 2014/01/16 11:45:35 kls Exp $ + * $Id: dvbdevice.h 3.5 2014/03/16 10:38:31 kls Exp $ */ #ifndef __DVBDEVICE_H @@ -92,6 +92,7 @@ int MapToDriver(int Value, const tDvbParameterMap *Map); int UserIndex(int Value, const tDvbParameterMap *Map); int DriverIndex(int Value, const tDvbParameterMap *Map); +extern const tDvbParameterMap PilotValues[]; extern const tDvbParameterMap InversionValues[]; extern const tDvbParameterMap BandwidthValues[]; extern const tDvbParameterMap CoderateValues[]; @@ -118,6 +119,9 @@ private: int hierarchy; int rollOff; int streamId; + int t2systemId; + int sisoMiso; + int pilot; int PrintParameter(char *p, char Name, int Value) const; const char *ParseParameter(const char *s, int &Value, const tDvbParameterMap *Map = NULL); public: @@ -134,6 +138,9 @@ public: int Hierarchy(void) const { return hierarchy; } int RollOff(void) const { return rollOff; } int StreamId(void) const { return streamId; } + int T2SystemId(void) const { return t2systemId; } + int SisoMiso(void) const { return sisoMiso; } + int Pilot(void) const { return pilot; } void SetPolarization(char Polarization) { polarization = Polarization; } void SetInversion(int Inversion) { inversion = Inversion; } void SetBandwidth(int Bandwidth) { bandwidth = Bandwidth; } @@ -146,6 +153,9 @@ public: void SetHierarchy(int Hierarchy) { hierarchy = Hierarchy; } void SetRollOff(int RollOff) { rollOff = RollOff; } void SetStreamId(int StreamId) { streamId = StreamId; } + void SetT2SystemId(int T2SystemId) { t2systemId = T2SystemId; } + void SetSisoMiso(int SisoMiso) { sisoMiso = SisoMiso; } + void SetPilot(int Pilot) { pilot = Pilot; } cString ToString(char Type) const; bool Parse(const char *s); }; diff --git a/menu.c b/menu.c index 683a4779..59b11d03 100644 --- a/menu.c +++ b/menu.c @@ -4,7 +4,7 @@ * See the main source file 'vdr.c' for copyright information and * how to reach the author. * - * $Id: menu.c 3.19 2014/02/08 12:36:12 kls Exp $ + * $Id: menu.c 3.23 2014/03/16 10:38:31 kls Exp $ */ #include "menu.h" @@ -214,9 +214,9 @@ void cMenuEditChannel::Setup(void) Add(new cMenuEditIntItem( tr("Tpid"), &data.tpid, 0, 0x1FFF)); Add(new cMenuEditCaItem( tr("CA"), &data.caids[0])); Add(new cMenuEditIntItem( tr("Sid"), &data.sid, 1, 0xFFFF)); - /* XXX not yet used Add(new cMenuEditIntItem( tr("Nid"), &data.nid, 0)); Add(new cMenuEditIntItem( tr("Tid"), &data.tid, 0)); + /* XXX not yet used Add(new cMenuEditIntItem( tr("Rid"), &data.rid, 0)); XXX*/ // Parameters for specific types of sources: @@ -2533,6 +2533,7 @@ public: int Level(void) { return level; } cRecording *Recording(void) { return recording; } bool IsDirectory(void) { return name != NULL; } + void SetRecording(cRecording *Recording) { recording = Recording; } virtual void SetMenuItem(cSkinDisplayMenu *DisplayMenu, int Index, bool Current, bool Selectable); }; @@ -2596,7 +2597,10 @@ cMenuRecordings::cMenuRecordings(const char *Base, int Level, bool OpenSubMenus, cMenuRecordings::~cMenuRecordings() { - helpKeys = -1; + if (cMenuRecordingItem *ri = (cMenuRecordingItem *)Get(Current())) { + if (!ri->IsDirectory()) + SetRecording(ri->Recording()->FileName()); + } free(base); } @@ -2782,6 +2786,7 @@ eOSState cMenuRecordings::Delete(void) Display(); if (!Count()) return osBack; + return osUser2; } else Skins.Message(mtError, tr("Error while deleting recording!")); @@ -2861,6 +2866,14 @@ eOSState cMenuRecordings::ProcessKey(eKeys Key) path = NULL; fileName = NULL; } + else if (state == osUser2) { + // a recording in a sub folder was deleted, so update the current item + cOsdMenu *m = HasSubMenu() ? SubMenu() : this; + if (cMenuRecordingItem *ri = (cMenuRecordingItem *)Get(Current())) { + if (cMenuRecordingItem *riSub = (cMenuRecordingItem *)m->Get(m->Current())) + ri->SetRecording(riSub->Recording()); + } + } if (Key == kYellow && HadSubMenu && !HasSubMenu()) { // the last recording in a subdirectory was deleted, so let's go back up cOsdMenu::Del(Current()); @@ -4952,6 +4965,7 @@ void cReplayControl::Stop(void) } } cDvbPlayerControl::Stop(); + cMenuRecordings::SetRecording(NULL); // make sure opening the Recordings menu navigates to the last replayed recording } void cReplayControl::SetRecording(const char *FileName) diff --git a/nit.c b/nit.c index e3bf4194..f3fe9231 100644 --- a/nit.c +++ b/nit.c @@ -4,7 +4,7 @@ * See the main source file 'vdr.c' for copyright information and * how to reach the author. * - * $Id: nit.c 3.0 2013/03/07 09:42:29 kls Exp $ + * $Id: nit.c 3.3 2014/03/16 10:38:31 kls Exp $ */ #include "nit.h" @@ -19,8 +19,9 @@ #define DVB_SYSTEM_1 0 // see also dvbdevice.c #define DVB_SYSTEM_2 1 -cNitFilter::cNitFilter(void) +cNitFilter::cNitFilter(cSdtFilter *SdtFilter) { + sdtFilter = SdtFilter; numNits = 0; networkId = 0; Set(0x10, 0x40); // NIT @@ -183,6 +184,7 @@ void cNitFilter::Process(u_short Pid, u_char Tid, const u_char *Data, int Length } } } + sdtFilter->Trigger(Source); } break; case SI::S2SatelliteDeliverySystemDescriptorTag: { @@ -243,7 +245,7 @@ void cNitFilter::Process(u_short Pid, u_char Tid, const u_char *Data, int Length } } if (!found || forceTransponderUpdate) { - for (int n = 0; n < NumFrequencies; n++) { + for (int n = 0; n < NumFrequencies; n++) { cChannel *Channel = new cChannel; Channel->SetId(ts.getOriginalNetworkId(), ts.getTransportStreamId(), 0, 0); if (Channel->SetTransponderData(Source, Frequencies[n], SymbolRate, dtp.ToString('C'))) @@ -253,6 +255,7 @@ void cNitFilter::Process(u_short Pid, u_char Tid, const u_char *Data, int Length } } } + sdtFilter->Trigger(Source); } break; case SI::TerrestrialDeliverySystemDescriptorTag: { @@ -314,8 +317,9 @@ void cNitFilter::Process(u_short Pid, u_char Tid, const u_char *Data, int Length else delete Channel; } - } + } } + sdtFilter->Trigger(Source); } break; case SI::ExtensionDescriptorTag: { @@ -329,11 +333,12 @@ void cNitFilter::Process(u_short Pid, u_char Tid, const u_char *Data, int Length SI::T2DeliverySystemDescriptor *td = (SI::T2DeliverySystemDescriptor *)d; int Frequency = Channel->Frequency(); int SymbolRate = Channel->Srate(); - //int SystemId = td->getSystemId(); cDvbTransponderParameters dtp(Channel->Parameters()); dtp.SetSystem(DVB_SYSTEM_2); dtp.SetStreamId(td->getPlpId()); + dtp.SetT2SystemId(td->getT2SystemId()); if (td->getExtendedDataFlag()) { + dtp.SetSisoMiso(td->getSisoMiso()); static int T2Bandwidths[] = { 8000000, 7000000, 6000000, 5000000, 10000000, 1712000, 0, 0 }; dtp.SetBandwidth(T2Bandwidths[td->getBandwidth()]); static int T2GuardIntervals[] = { GUARD_INTERVAL_1_32, GUARD_INTERVAL_1_16, GUARD_INTERVAL_1_8, GUARD_INTERVAL_1_4, GUARD_INTERVAL_1_128, GUARD_INTERVAL_19_128, GUARD_INTERVAL_19_256, 0 }; diff --git a/nit.h b/nit.h index 700db9a2..4673f960 100644 --- a/nit.h +++ b/nit.h @@ -4,13 +4,14 @@ * See the main source file 'vdr.c' for copyright information and * how to reach the author. * - * $Id: nit.h 3.0 2007/06/10 08:50:21 kls Exp $ + * $Id: nit.h 3.1 2014/03/10 14:12:05 kls Exp $ */ #ifndef __NIT_H #define __NIT_H #include "filter.h" +#include "sdt.h" #define MAXNITS 16 #define MAXNETWORKNAME Utf8BufSize(256) @@ -26,13 +27,14 @@ private: }; cSectionSyncer sectionSyncer; + cSdtFilter *sdtFilter; cNit nits[MAXNITS]; u_short networkId; int numNits; protected: virtual void Process(u_short Pid, u_char Tid, const u_char *Data, int Length); public: - cNitFilter(void); + cNitFilter(cSdtFilter *SdtFilter); virtual void SetStatus(bool On); }; diff --git a/po/ar.po b/po/ar.po index cedfac3e..ef9982be 100644 --- a/po/ar.po +++ b/po/ar.po @@ -80,6 +80,15 @@ msgstr "Rolloff" msgid "StreamId" msgstr "StreamId" +msgid "Pilot" +msgstr "" + +msgid "T2SystemId" +msgstr "" + +msgid "SISO/MISO" +msgstr "" + msgid "Starting EPG scan" msgstr "EPG ا لبدء بالبحث على دليل القنوات الالكترونى " @@ -567,6 +576,12 @@ msgstr "الكامة" msgid "Sid" msgstr "Sid" +msgid "Nid" +msgstr "" + +msgid "Tid" +msgstr "" + msgid "Channel settings are not unique!" msgstr "اعدادات القناة غبر موحد" diff --git a/po/ca_ES.po b/po/ca_ES.po index 6329714f..3f2105ff 100644 --- a/po/ca_ES.po +++ b/po/ca_ES.po @@ -79,6 +79,15 @@ msgstr "Rolloff" msgid "StreamId" msgstr "StreamId" +msgid "Pilot" +msgstr "" + +msgid "T2SystemId" +msgstr "" + +msgid "SISO/MISO" +msgstr "" + msgid "Starting EPG scan" msgstr "Iniciant exploraci EPG" @@ -566,6 +575,12 @@ msgstr "Acc msgid "Sid" msgstr "Sid" +msgid "Nid" +msgstr "" + +msgid "Tid" +msgstr "" + msgid "Channel settings are not unique!" msgstr "Propietats del canal duplicades!" diff --git a/po/cs_CZ.po b/po/cs_CZ.po index 7f857d5e..f6ce5727 100644 --- a/po/cs_CZ.po +++ b/po/cs_CZ.po @@ -79,6 +79,15 @@ msgstr "RollOff" msgid "StreamId" msgstr "StreamId" +msgid "Pilot" +msgstr "" + +msgid "T2SystemId" +msgstr "" + +msgid "SISO/MISO" +msgstr "" + msgid "Starting EPG scan" msgstr "Začíná prohledávání EPG" @@ -566,6 +575,12 @@ msgstr "CA" msgid "Sid" msgstr "Sid" +msgid "Nid" +msgstr "" + +msgid "Tid" +msgstr "" + msgid "Channel settings are not unique!" msgstr "Nastavení kanálu není jedinečné!" diff --git a/po/da_DK.po b/po/da_DK.po index c8734bdd..7a4ea8f9 100644 --- a/po/da_DK.po +++ b/po/da_DK.po @@ -76,6 +76,15 @@ msgstr "" msgid "StreamId" msgstr "" +msgid "Pilot" +msgstr "" + +msgid "T2SystemId" +msgstr "" + +msgid "SISO/MISO" +msgstr "" + msgid "Starting EPG scan" msgstr "Starter EPG skanning" @@ -563,6 +572,12 @@ msgstr "CA" msgid "Sid" msgstr "Sid" +msgid "Nid" +msgstr "" + +msgid "Tid" +msgstr "" + msgid "Channel settings are not unique!" msgstr "Kanalindstillinger er ikke entydige!" diff --git a/po/de_DE.po b/po/de_DE.po index 7d69ce05..731f8f26 100644 --- a/po/de_DE.po +++ b/po/de_DE.po @@ -76,6 +76,15 @@ msgstr "Rolloff" msgid "StreamId" msgstr "StreamId" +msgid "Pilot" +msgstr "Pilot" + +msgid "T2SystemId" +msgstr "T2-Systemkennung" + +msgid "SISO/MISO" +msgstr "SISO/MISO" + msgid "Starting EPG scan" msgstr "Aktualisiere EPG-Daten" @@ -563,6 +572,12 @@ msgstr "CA" msgid "Sid" msgstr "Sid" +msgid "Nid" +msgstr "Nid" + +msgid "Tid" +msgstr "Tid" + msgid "Channel settings are not unique!" msgstr "Kanaleinstellungen sind nicht eindeutig!" diff --git a/po/el_GR.po b/po/el_GR.po index ca0701a8..9c10cfef 100644 --- a/po/el_GR.po +++ b/po/el_GR.po @@ -76,6 +76,15 @@ msgstr "" msgid "StreamId" msgstr "" +msgid "Pilot" +msgstr "" + +msgid "T2SystemId" +msgstr "" + +msgid "SISO/MISO" +msgstr "" + msgid "Starting EPG scan" msgstr " EPG" @@ -563,6 +572,12 @@ msgstr "CA" msgid "Sid" msgstr "Sid" +msgid "Nid" +msgstr "" + +msgid "Tid" +msgstr "" + msgid "Channel settings are not unique!" msgstr " !" diff --git a/po/es_ES.po b/po/es_ES.po index d27dd6ea..fc95313e 100644 --- a/po/es_ES.po +++ b/po/es_ES.po @@ -77,6 +77,15 @@ msgstr "Rolloff" msgid "StreamId" msgstr "StreamId" +msgid "Pilot" +msgstr "" + +msgid "T2SystemId" +msgstr "" + +msgid "SISO/MISO" +msgstr "" + msgid "Starting EPG scan" msgstr "Iniciando la exploracin de EPG" @@ -564,6 +573,12 @@ msgstr "Acceso condicional (CA)" msgid "Sid" msgstr "Sid" +msgid "Nid" +msgstr "" + +msgid "Tid" +msgstr "" + msgid "Channel settings are not unique!" msgstr "!Propiedades de canal duplicadas!" diff --git a/po/et_EE.po b/po/et_EE.po index e48bfa1f..7c7cc1ea 100644 --- a/po/et_EE.po +++ b/po/et_EE.po @@ -76,6 +76,15 @@ msgstr "Rolloff" msgid "StreamId" msgstr "Stream-tunnus" +msgid "Pilot" +msgstr "" + +msgid "T2SystemId" +msgstr "" + +msgid "SISO/MISO" +msgstr "" + msgid "Starting EPG scan" msgstr "EPG skaneerimine käivitatud" @@ -563,6 +572,12 @@ msgstr "CA" msgid "Sid" msgstr "Sid" +msgid "Nid" +msgstr "" + +msgid "Tid" +msgstr "" + msgid "Channel settings are not unique!" msgstr "Kanaliseaded ei ole unikaalsed!" diff --git a/po/fi_FI.po b/po/fi_FI.po index 86ce6fec..002b4c70 100644 --- a/po/fi_FI.po +++ b/po/fi_FI.po @@ -80,6 +80,15 @@ msgstr "Rolloff" msgid "StreamId" msgstr "Lähetetunniste" +msgid "Pilot" +msgstr "Pilotti" + +msgid "T2SystemId" +msgstr "T2-tunniste" + +msgid "SISO/MISO" +msgstr "SISO/MISO" + msgid "Starting EPG scan" msgstr "Ohjelmaoppaan päivitys aloitettu" @@ -567,6 +576,12 @@ msgstr "Salaus (CA)" msgid "Sid" msgstr "Palvelu-ID" +msgid "Nid" +msgstr "Verkko-ID" + +msgid "Tid" +msgstr "Lähete-ID" + msgid "Channel settings are not unique!" msgstr "Kanava-asetukset eivät ole yksilölliset!" @@ -1427,7 +1442,7 @@ msgstr "TOISTO" #, c-format msgid "Moving dish to %.1f..." -msgstr "Käännetaan lautasta %.1f..." +msgstr "Käännetään lautasta %.1f..." msgid "ST:TNG Panels" msgstr "ST:TNG konsoli" diff --git a/po/fr_FR.po b/po/fr_FR.po index e1cde724..d216725f 100644 --- a/po/fr_FR.po +++ b/po/fr_FR.po @@ -86,6 +86,15 @@ msgstr "Rolloff" msgid "StreamId" msgstr "StreamId" +msgid "Pilot" +msgstr "" + +msgid "T2SystemId" +msgstr "" + +msgid "SISO/MISO" +msgstr "" + msgid "Starting EPG scan" msgstr "Mise à jour du guide des programmes" @@ -573,6 +582,12 @@ msgstr "CA" msgid "Sid" msgstr "Sid" +msgid "Nid" +msgstr "" + +msgid "Tid" +msgstr "" + msgid "Channel settings are not unique!" msgstr "Cette chaîne n'est pas unique !" diff --git a/po/hr_HR.po b/po/hr_HR.po index 02aac416..6419a678 100644 --- a/po/hr_HR.po +++ b/po/hr_HR.po @@ -78,6 +78,15 @@ msgstr "" msgid "StreamId" msgstr "" +msgid "Pilot" +msgstr "" + +msgid "T2SystemId" +msgstr "" + +msgid "SISO/MISO" +msgstr "" + msgid "Starting EPG scan" msgstr "Poinjem EPG pretragu" @@ -565,6 +574,12 @@ msgstr "Kodiranje (CA)" msgid "Sid" msgstr "Sid" +msgid "Nid" +msgstr "" + +msgid "Tid" +msgstr "" + msgid "Channel settings are not unique!" msgstr "Postavke programa nisu jedinstvene!" diff --git a/po/hu_HU.po b/po/hu_HU.po index 55a1f7a5..d6a13c3d 100644 --- a/po/hu_HU.po +++ b/po/hu_HU.po @@ -80,6 +80,15 @@ msgstr "Rolloff" msgid "StreamId" msgstr "Stream azonosító" +msgid "Pilot" +msgstr "" + +msgid "T2SystemId" +msgstr "" + +msgid "SISO/MISO" +msgstr "" + msgid "Starting EPG scan" msgstr "EPG adatok aktualizálása" @@ -567,6 +576,12 @@ msgstr "CA" msgid "Sid" msgstr "Sid" +msgid "Nid" +msgstr "" + +msgid "Tid" +msgstr "" + msgid "Channel settings are not unique!" msgstr "Az adóbeállítások nem egyértelműek" diff --git a/po/it_IT.po b/po/it_IT.po index 37323508..107c1426 100644 --- a/po/it_IT.po +++ b/po/it_IT.po @@ -11,7 +11,7 @@ msgid "" msgstr "" "Project-Id-Version: VDR 2.0.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-10-14 11:56+0200\n" +"POT-Creation-Date: 2013-11-03 15:59+0100\n" "PO-Revision-Date: 2013-11-10 23:02+0100\n" "Last-Translator: Diego Pierotto \n" "Language-Team: Italian \n" @@ -83,6 +83,15 @@ msgstr "Rolloff" msgid "StreamId" msgstr "StreamId" +msgid "Pilot" +msgstr "" + +msgid "T2SystemId" +msgstr "" + +msgid "SISO/MISO" +msgstr "" + msgid "Starting EPG scan" msgstr "Inizio scansione EPG" @@ -570,6 +579,12 @@ msgstr "CA" msgid "Sid" msgstr "Sid" +msgid "Nid" +msgstr "" + +msgid "Tid" +msgstr "" + msgid "Channel settings are not unique!" msgstr "Parametri canale non univoci!" diff --git a/po/lt_LT.po b/po/lt_LT.po index f702640f..d7067f8e 100644 --- a/po/lt_LT.po +++ b/po/lt_LT.po @@ -76,6 +76,15 @@ msgstr "Rolloff" msgid "StreamId" msgstr "StreamId" +msgid "Pilot" +msgstr "" + +msgid "T2SystemId" +msgstr "" + +msgid "SISO/MISO" +msgstr "" + msgid "Starting EPG scan" msgstr "Pradedamas EPG skanavimas" @@ -563,6 +572,12 @@ msgstr "CA (dekodavimo sistema)" msgid "Sid" msgstr "Serviso id" +msgid "Nid" +msgstr "" + +msgid "Tid" +msgstr "" + msgid "Channel settings are not unique!" msgstr "Kanalų nustatymai neunikalūs!" diff --git a/po/mk_MK.po b/po/mk_MK.po index f1811400..990a9f10 100644 --- a/po/mk_MK.po +++ b/po/mk_MK.po @@ -77,6 +77,15 @@ msgstr "Рол-оф" msgid "StreamId" msgstr "StreamId" +msgid "Pilot" +msgstr "" + +msgid "T2SystemId" +msgstr "" + +msgid "SISO/MISO" +msgstr "" + msgid "Starting EPG scan" msgstr "Започнувам скенирање на EPG" @@ -564,6 +573,12 @@ msgstr "Кодирање (CA)" msgid "Sid" msgstr "Sid" +msgid "Nid" +msgstr "" + +msgid "Tid" +msgstr "" + msgid "Channel settings are not unique!" msgstr "Уредбите на каналот не се уникатни!" diff --git a/po/nl_NL.po b/po/nl_NL.po index 8bc7526f..ffc66df4 100644 --- a/po/nl_NL.po +++ b/po/nl_NL.po @@ -81,6 +81,15 @@ msgstr "Rolloff" msgid "StreamId" msgstr "StreamId" +msgid "Pilot" +msgstr "" + +msgid "T2SystemId" +msgstr "" + +msgid "SISO/MISO" +msgstr "" + msgid "Starting EPG scan" msgstr "Bezig met starten EPG scan" @@ -568,6 +577,12 @@ msgstr "CA" msgid "Sid" msgstr "Sid" +msgid "Nid" +msgstr "" + +msgid "Tid" +msgstr "" + msgid "Channel settings are not unique!" msgstr "Kanaalinstellingen zijn niet uniek!" diff --git a/po/nn_NO.po b/po/nn_NO.po index d5a05d54..c0d32549 100644 --- a/po/nn_NO.po +++ b/po/nn_NO.po @@ -77,6 +77,15 @@ msgstr "" msgid "StreamId" msgstr "" +msgid "Pilot" +msgstr "" + +msgid "T2SystemId" +msgstr "" + +msgid "SISO/MISO" +msgstr "" + msgid "Starting EPG scan" msgstr "" @@ -564,6 +573,12 @@ msgstr "Kortleser" msgid "Sid" msgstr "Sid" +msgid "Nid" +msgstr "" + +msgid "Tid" +msgstr "" + msgid "Channel settings are not unique!" msgstr "" diff --git a/po/pl_PL.po b/po/pl_PL.po index d125ec3b..f67c6216 100644 --- a/po/pl_PL.po +++ b/po/pl_PL.po @@ -78,6 +78,15 @@ msgstr "Rolloff" msgid "StreamId" msgstr "StreamId" +msgid "Pilot" +msgstr "" + +msgid "T2SystemId" +msgstr "" + +msgid "SISO/MISO" +msgstr "" + msgid "Starting EPG scan" msgstr "Rozpoczynam skanowanie EPG" @@ -565,6 +574,12 @@ msgstr "CA" msgid "Sid" msgstr "Sid" +msgid "Nid" +msgstr "" + +msgid "Tid" +msgstr "" + msgid "Channel settings are not unique!" msgstr "Ustawienia kanau nie s unikalne!" diff --git a/po/pt_PT.po b/po/pt_PT.po index dae170f7..575d3c27 100644 --- a/po/pt_PT.po +++ b/po/pt_PT.po @@ -77,6 +77,15 @@ msgstr "Rolloff" msgid "StreamId" msgstr "" +msgid "Pilot" +msgstr "" + +msgid "T2SystemId" +msgstr "" + +msgid "SISO/MISO" +msgstr "" + msgid "Starting EPG scan" msgstr "A iniciar a busca do EPG" @@ -564,6 +573,12 @@ msgstr "CA" msgid "Sid" msgstr "Sid" +msgid "Nid" +msgstr "" + +msgid "Tid" +msgstr "" + msgid "Channel settings are not unique!" msgstr "Parmetros do canal no so nicos!" diff --git a/po/ro_RO.po b/po/ro_RO.po index 2421a380..fabbd4ed 100644 --- a/po/ro_RO.po +++ b/po/ro_RO.po @@ -78,6 +78,15 @@ msgstr "Rolloff" msgid "StreamId" msgstr "Identificator Stream" +msgid "Pilot" +msgstr "" + +msgid "T2SystemId" +msgstr "" + +msgid "SISO/MISO" +msgstr "" + msgid "Starting EPG scan" msgstr "Pornesc achiziţia EPG" @@ -565,6 +574,12 @@ msgstr "CA (Acces Condiţional)" msgid "Sid" msgstr "Sid" +msgid "Nid" +msgstr "" + +msgid "Tid" +msgstr "" + msgid "Channel settings are not unique!" msgstr "Parametrii canalului nu sunt univoci!" diff --git a/po/ru_RU.po b/po/ru_RU.po index d8aff45e..ee8ec373 100644 --- a/po/ru_RU.po +++ b/po/ru_RU.po @@ -77,6 +77,15 @@ msgstr "Rolloff" msgid "StreamId" msgstr "StreamId" +msgid "Pilot" +msgstr "" + +msgid "T2SystemId" +msgstr "" + +msgid "SISO/MISO" +msgstr "" + msgid "Starting EPG scan" msgstr " EPG-" @@ -564,6 +573,12 @@ msgstr "CA ( msgid "Sid" msgstr "Sid" +msgid "Nid" +msgstr "" + +msgid "Tid" +msgstr "" + msgid "Channel settings are not unique!" msgstr " !" diff --git a/po/sk_SK.po b/po/sk_SK.po index 0f867c6d..97a6930d 100644 --- a/po/sk_SK.po +++ b/po/sk_SK.po @@ -76,6 +76,15 @@ msgstr "Rolloff" msgid "StreamId" msgstr "StreamId" +msgid "Pilot" +msgstr "" + +msgid "T2SystemId" +msgstr "" + +msgid "SISO/MISO" +msgstr "" + msgid "Starting EPG scan" msgstr "Spa sa snmanie EPG" @@ -563,6 +572,12 @@ msgstr "CA" msgid "Sid" msgstr "Sid" +msgid "Nid" +msgstr "" + +msgid "Tid" +msgstr "" + msgid "Channel settings are not unique!" msgstr "Nastavenia kanlu nie s vnimon!" diff --git a/po/sl_SI.po b/po/sl_SI.po index c7c4eba3..c3a899c3 100644 --- a/po/sl_SI.po +++ b/po/sl_SI.po @@ -77,6 +77,15 @@ msgstr "Odpadanje" msgid "StreamId" msgstr "StreamId" +msgid "Pilot" +msgstr "" + +msgid "T2SystemId" +msgstr "" + +msgid "SISO/MISO" +msgstr "" + msgid "Starting EPG scan" msgstr "Prienjam EPG-scan" @@ -564,6 +573,12 @@ msgstr "CA" msgid "Sid" msgstr "Sid" +msgid "Nid" +msgstr "" + +msgid "Tid" +msgstr "" + msgid "Channel settings are not unique!" msgstr "Nastavitve kanala niso edinstvene!" diff --git a/po/sr_RS.po b/po/sr_RS.po index c44c40b3..9f2ef6bd 100644 --- a/po/sr_RS.po +++ b/po/sr_RS.po @@ -77,6 +77,15 @@ msgstr "Rolloff" msgid "StreamId" msgstr "StreamId" +msgid "Pilot" +msgstr "" + +msgid "T2SystemId" +msgstr "" + +msgid "SISO/MISO" +msgstr "" + msgid "Starting EPG scan" msgstr "Poinje EPG pretraivanje" @@ -564,6 +573,12 @@ msgstr "Kodiranje (CA)" msgid "Sid" msgstr "Sid" +msgid "Nid" +msgstr "" + +msgid "Tid" +msgstr "" + msgid "Channel settings are not unique!" msgstr "Postavke kanala nisu jedinstvene!" diff --git a/po/sv_SE.po b/po/sv_SE.po index 4bdfee54..06a5f20b 100644 --- a/po/sv_SE.po +++ b/po/sv_SE.po @@ -80,6 +80,15 @@ msgstr "Rolloff" msgid "StreamId" msgstr "StreamId" +msgid "Pilot" +msgstr "" + +msgid "T2SystemId" +msgstr "" + +msgid "SISO/MISO" +msgstr "" + msgid "Starting EPG scan" msgstr "Pbrjar EPG-avskning" @@ -567,6 +576,12 @@ msgstr "Kortl msgid "Sid" msgstr "Sid" +msgid "Nid" +msgstr "" + +msgid "Tid" +msgstr "" + msgid "Channel settings are not unique!" msgstr "Kanalinstllningarna r ej unika!" diff --git a/po/tr_TR.po b/po/tr_TR.po index 795ea9f1..d79158dc 100644 --- a/po/tr_TR.po +++ b/po/tr_TR.po @@ -76,6 +76,15 @@ msgstr "" msgid "StreamId" msgstr "" +msgid "Pilot" +msgstr "" + +msgid "T2SystemId" +msgstr "" + +msgid "SISO/MISO" +msgstr "" + msgid "Starting EPG scan" msgstr "EPG tarama balyor" @@ -563,6 +572,12 @@ msgstr "CA" msgid "Sid" msgstr "Sid" +msgid "Nid" +msgstr "" + +msgid "Tid" +msgstr "" + msgid "Channel settings are not unique!" msgstr "Kanal ayarlar belli del!" diff --git a/po/uk_UA.po b/po/uk_UA.po index ea06c659..df11b8db 100644 --- a/po/uk_UA.po +++ b/po/uk_UA.po @@ -77,6 +77,15 @@ msgstr "Крен" msgid "StreamId" msgstr "StreamId" +msgid "Pilot" +msgstr "" + +msgid "T2SystemId" +msgstr "" + +msgid "SISO/MISO" +msgstr "" + msgid "Starting EPG scan" msgstr "Починаю EPG-сканування" @@ -564,6 +573,12 @@ msgstr "CA (декодер)" msgid "Sid" msgstr "Sid" +msgid "Nid" +msgstr "" + +msgid "Tid" +msgstr "" + msgid "Channel settings are not unique!" msgstr "Настройки каналу не єдині!" diff --git a/po/zh_CN.po b/po/zh_CN.po index a50b5bcc..648f61d7 100644 --- a/po/zh_CN.po +++ b/po/zh_CN.po @@ -78,6 +78,15 @@ msgstr "越零率" msgid "StreamId" msgstr "StreamId" +msgid "Pilot" +msgstr "" + +msgid "T2SystemId" +msgstr "" + +msgid "SISO/MISO" +msgstr "" + msgid "Starting EPG scan" msgstr "开始节目单扫描" @@ -565,6 +574,12 @@ msgstr "CA" msgid "Sid" msgstr "Sid" +msgid "Nid" +msgstr "" + +msgid "Tid" +msgstr "" + msgid "Channel settings are not unique!" msgstr "频道设置不是唯一的!" diff --git a/recording.c b/recording.c index 5da54940..cf3c5f05 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 3.16 2014/02/08 11:16:02 kls Exp $ + * $Id: recording.c 3.18 2014/03/16 11:09:17 kls Exp $ */ #include "recording.h" @@ -1237,6 +1237,7 @@ bool cRecording::ChangeName(const char *NewName) fileName = strdup(OldFileName); return false; } + isOnVideoDirectoryFileSystem = -1; // it might have been moved to a different file system ClearSortName(); Recordings.ChangeState(); Recordings.TouchUpdate(); @@ -1425,6 +1426,7 @@ bool cRecordings::ScanVideoDir(const char *DirName, bool Foreground, int LinkLev if (r->Name()) { r->NumFrames(); // initializes the numFrames member r->FileSizeMB(); // initializes the fileSizeMB member + r->IsOnVideoDirectoryFileSystem(); // initializes the isOnVideoDirectoryFileSystem member if (deleted) r->deleted = time(NULL); Lock(); diff --git a/remux.c b/remux.c index 44eec8ce..87ed469d 100644 --- a/remux.c +++ b/remux.c @@ -4,7 +4,7 @@ * See the main source file 'vdr.c' for copyright information and * how to reach the author. * - * $Id: remux.c 3.3 2014/02/21 11:51:55 kls Exp $ + * $Id: remux.c 3.5 2014/03/08 15:05:35 kls Exp $ */ #include "remux.h" @@ -272,7 +272,7 @@ uchar cTsPayload::GetByte(void) if (data[index] == TS_SYNC_BYTE && index + TS_SIZE <= length) { // to make sure we are at a TS header start and drop incomplete TS packets at the end uchar *p = data + index; if (TsPid(p) == pid) { // only handle TS packets for the initial PID - if (numPacketsPid++ > MAX_TS_PACKETS_FOR_VIDEO_FRAME_DETECTION) + if (++numPacketsPid > MAX_TS_PACKETS_FOR_VIDEO_FRAME_DETECTION) return SetEof(); if (TsHasPayload(p)) { if (index > 0 && TsPayloadStart(p)) // checking index to not skip the very first TS packet @@ -281,6 +281,8 @@ uchar cTsPayload::GetByte(void) break; } } + else if (TsPid(p) == PATPID) + return SetEof(); // caller must see PAT packets in case of index regeneration else numPacketsOther++; } @@ -1252,7 +1254,7 @@ uint32_t cH264Parser::GetBits(int Bits) uint32_t cH264Parser::GetGolombUe(void) { int z = -1; - for (int b = 0; !b; z++) + for (int b = 0; !b && z < 32; z++) // limiting z to no get stuck if GetBit() always returns 0 b = GetBit(); return (1 << z) - 1 + GetBits(z); } @@ -1288,8 +1290,10 @@ int cH264Parser::Parse(const uchar *Data, int Length, int Pid) case nutAccessUnitDelimiter: ParseAccessUnitDelimiter(); gotAccessUnitDelimiter = true; break; - case nutSequenceParameterSet: ParseSequenceParameterSet(); - gotSequenceParameterSet = true; + case nutSequenceParameterSet: if (gotAccessUnitDelimiter) { + ParseSequenceParameterSet(); + gotSequenceParameterSet = true; + } break; case nutCodedSliceNonIdr: case nutCodedSliceIdr: if (gotAccessUnitDelimiter && gotSequenceParameterSet) { diff --git a/sdt.c b/sdt.c index 44c6c9d9..7537cfc1 100644 --- a/sdt.c +++ b/sdt.c @@ -4,7 +4,7 @@ * See the main source file 'vdr.c' for copyright information and * how to reach the author. * - * $Id: sdt.c 3.2 2014/02/18 10:37:50 kls Exp $ + * $Id: sdt.c 3.3 2014/03/10 14:42:20 kls Exp $ */ #include "sdt.h" @@ -17,19 +17,30 @@ cSdtFilter::cSdtFilter(cPatFilter *PatFilter) { + source = cSource::stNone; patFilter = PatFilter; Set(0x11, 0x42); // SDT } void cSdtFilter::SetStatus(bool On) { + cMutexLock MutexLock(&mutex); cFilter::SetStatus(On); sectionSyncer.Reset(); + if (!On) + source = cSource::stNone; +} + +void cSdtFilter::Trigger(int Source) +{ + cMutexLock MutexLock(&mutex); + source = Source; } void cSdtFilter::Process(u_short Pid, u_char Tid, const u_char *Data, int Length) { - if (!(Source() && Transponder())) + cMutexLock MutexLock(&mutex); + if (!(source && Transponder())) return; SI::SDT sdt(Data, false); if (!sdt.CheckCRCAndParse()) @@ -40,9 +51,9 @@ void cSdtFilter::Process(u_short Pid, u_char Tid, const u_char *Data, int Length return; SI::SDT::Service SiSdtService; for (SI::Loop::Iterator it; sdt.serviceLoop.getNext(SiSdtService, it); ) { - cChannel *channel = Channels.GetByChannelID(tChannelID(Source(), sdt.getOriginalNetworkId(), sdt.getTransportStreamId(), SiSdtService.getServiceId())); + cChannel *channel = Channels.GetByChannelID(tChannelID(source, sdt.getOriginalNetworkId(), sdt.getTransportStreamId(), SiSdtService.getServiceId())); if (!channel) - channel = Channels.GetByChannelID(tChannelID(Source(), 0, Transponder(), SiSdtService.getServiceId())); + channel = Channels.GetByChannelID(tChannelID(source, 0, Transponder(), SiSdtService.getServiceId())); if (channel) channel->SetSeen(); @@ -66,7 +77,7 @@ void cSdtFilter::Process(u_short Pid, u_char Tid, const u_char *Data, int Length sd->serviceName.getText(NameBuf, ShortNameBuf, sizeof(NameBuf), sizeof(ShortNameBuf)); char *pn = compactspace(NameBuf); char *ps = compactspace(ShortNameBuf); - if (!*ps && cSource::IsCable(Source())) { + if (!*ps && cSource::IsCable(source)) { // Some cable providers don't mark short channel names according to the // standard, but rather go their own way and use "name>short name": char *p = strchr(pn, '>'); // fix for UPC Wien @@ -117,7 +128,7 @@ void cSdtFilter::Process(u_short Pid, u_char Tid, const u_char *Data, int Length SI::NVODReferenceDescriptor *nrd = (SI::NVODReferenceDescriptor *)d; SI::NVODReferenceDescriptor::Service Service; for (SI::Loop::Iterator it; nrd->serviceLoop.getNext(Service, it); ) { - cChannel *link = Channels.GetByChannelID(tChannelID(Source(), Service.getOriginalNetworkId(), Service.getTransportStream(), Service.getServiceId())); + cChannel *link = Channels.GetByChannelID(tChannelID(source, Service.getOriginalNetworkId(), Service.getTransportStream(), Service.getServiceId())); if (!link && Setup.UpdateChannels >= 4) { link = Channels.NewChannel(Channel(), "NVOD", "", "", Service.getOriginalNetworkId(), Service.getTransportStream(), Service.getServiceId()); patFilter->Trigger(Service.getServiceId()); @@ -142,6 +153,6 @@ void cSdtFilter::Process(u_short Pid, u_char Tid, const u_char *Data, int Length } } if (sdt.getSectionNumber() == sdt.getLastSectionNumber()) - Channels.MarkObsoleteChannels(Source(), sdt.getOriginalNetworkId(), sdt.getTransportStreamId()); + Channels.MarkObsoleteChannels(source, sdt.getOriginalNetworkId(), sdt.getTransportStreamId()); Channels.Unlock(); } diff --git a/sdt.h b/sdt.h index 6b3f24ff..01653f45 100644 --- a/sdt.h +++ b/sdt.h @@ -4,7 +4,7 @@ * See the main source file 'vdr.c' for copyright information and * how to reach the author. * - * $Id: sdt.h 3.0 2004/01/05 14:30:14 kls Exp $ + * $Id: sdt.h 3.1 2014/03/10 14:40:54 kls Exp $ */ #ifndef __SDT_H @@ -15,13 +15,16 @@ class cSdtFilter : public cFilter { private: + cMutex mutex; cSectionSyncer sectionSyncer; + int source; cPatFilter *patFilter; protected: virtual void Process(u_short Pid, u_char Tid, const u_char *Data, int Length); public: cSdtFilter(cPatFilter *PatFilter); virtual void SetStatus(bool On); + void Trigger(int Source); }; #endif //__SDT_H diff --git a/skinlcars.c b/skinlcars.c index d652251e..e9d1e28f 100644 --- a/skinlcars.c +++ b/skinlcars.c @@ -4,7 +4,7 @@ * See the main source file 'vdr.c' for copyright information and * how to reach the author. * - * $Id: skinlcars.c 3.6 2013/11/16 13:20:19 kls Exp $ + * $Id: skinlcars.c 3.7 2014/03/10 12:04:06 kls Exp $ */ // "Star Trek: The Next Generation"(R) is a registered trademark of Paramount Pictures, @@ -1361,7 +1361,7 @@ void cSkinLCARSDisplayMenu::DrawLiveIndicator(void) if (initial || y != lastLiveIndicatorY || Transferring != lastLiveIndicatorTransferring) { if (lastLiveIndicatorY >= 0) osd->DrawRectangle(xs12, lastLiveIndicatorY, xs13 - 1, lastLiveIndicatorY + lineHeight - 1, Theme.Color(clrBackground)); - if (y >= 0) { + if (y > 0) { tColor ColorBg = Theme.Color(clrChannelFrameBg); osd->DrawRectangle(xs12, y, xs12 + lineHeight / 2 - 1, y + lineHeight - 1, ColorBg); osd->DrawEllipse (xs12 + lineHeight / 2, y, xs13 - 1, y + lineHeight - 1, ColorBg, 5); diff --git a/sourceparams.c b/sourceparams.c index 2f7b4e8a..3eec406a 100644 --- a/sourceparams.c +++ b/sourceparams.c @@ -4,7 +4,7 @@ * See the main source file 'vdr.c' for copyright information and * how to reach the author. * - * $Id: sourceparams.c 3.0 2010/03/06 11:13:39 kls Exp $ + * $Id: sourceparams.c 3.1 2014/03/09 12:03:09 kls Exp $ */ #include "sourceparams.h" @@ -21,8 +21,8 @@ cSourceParam::cSourceParam(char Source, const char *Description) return; } SourceParams.Add(this); - if (!strchr("ACST", Source)) // no, it's not "ATSC" ;-) - Sources.Add(new cSource(Source, Description)); + if (!Sources.ContainsSourceType(source)) + Sources.Add(new cSource(source, Description)); dsyslog("registered source parameters for '%c - %s'", source, Description); } else diff --git a/sources.c b/sources.c index c2a3dba1..f0a34327 100644 --- a/sources.c +++ b/sources.c @@ -4,7 +4,7 @@ * See the main source file 'vdr.c' for copyright information and * how to reach the author. * - * $Id: sources.c 3.5 2013/12/28 11:33:08 kls Exp $ + * $Id: sources.c 3.6 2014/03/09 12:05:42 kls Exp $ */ #include "sources.h" @@ -124,3 +124,12 @@ cSource *cSources::Get(int Code) } return NULL; } + +bool cSources::ContainsSourceType(char SourceType) +{ + for (cSource *p = First(); p; p = Next(p)) { + if (cSource::ToChar(p->Code()) == SourceType) + return true; + } + return false; +} diff --git a/sources.h b/sources.h index 8c2fdfb8..1cd05b83 100644 --- a/sources.h +++ b/sources.h @@ -4,7 +4,7 @@ * See the main source file 'vdr.c' for copyright information and * how to reach the author. * - * $Id: sources.h 3.2 2013/08/21 10:27:32 kls Exp $ + * $Id: sources.h 3.3 2014/03/09 11:59:49 kls Exp $ */ #ifndef __SOURCES_H @@ -62,6 +62,7 @@ public: class cSources : public cConfig { public: cSource *Get(int Code); + bool ContainsSourceType(char SourceType); }; extern cSources Sources; diff --git a/vdr.5 b/vdr.5 index 4c273a87..645ce38b 100644 --- a/vdr.5 +++ b/vdr.5 @@ -8,7 +8,7 @@ .\" License as specified in the file COPYING that comes with the .\" vdr distribution. .\" -.\" $Id: vdr.5 3.1 2013/08/11 13:50:42 kls Exp $ +.\" $Id: vdr.5 3.2 2014/03/16 10:38:31 kls Exp $ .\" .TH vdr 5 "31 Mar 2013" "2.0" "Video Disk Recorder Files" .SH NAME @@ -99,12 +99,15 @@ l l. \fBI\fR@Inversion (0, 1) \fBL\fR@Left circular polarization \fBM\fR@Modulation (2, 5, 6, 7, 10, 11, 12, 16, 32, 64, 128, 256, 999) +\fBN\fR@pilot mode (0, 1, 999) \fBO\fR@rollOff (0, 20, 25, 35) \fBP\fR@stream id (0-255) +\fBQ\fR@t2 system id (0-65535) \fBR\fR@Right circular polarization \fBS\fR@delivery System (0, 1) \fBT\fR@Transmission mode (1, 2, 4, 8, 16, 32) \fBV\fR@Vertical polarization +\fBX\fR@siso/miso mode (0, 1) \fBY\fR@hierarchY (0, 1, 2, 4) .TE @@ -139,6 +142,8 @@ l l. \fB256\fR@QAM256 (DVB-C, DVB-T2) .TE +\fBPilot mode:\fR The pilot mode (0 = "off", 1 = "on", 999 = "auto") for DVB-S2 multiplex (DVB-S2 only). + \fBRolloff:\fR The Nyquist filter rolloff factor for DVB-S (\fB35\fR) and DVB-S2 (\fB35\fR, 25, 20), 35 = 0.35, 25 = 0.25, 20 = 0.20, DVB-S/DVB-S2 default value is 0.35 @@ -146,8 +151,12 @@ l l. Physical Layer Pipe (PLP) id (\fB0\fR-255) for DVB-T2 multiplex (DVB-S2/DVB-T2 only, with devices that support "multi streaming"). +\fBT2 System id:\fR Unique identifier (\fB0\fR-65535) of T2 system within the DVB network (DVB-T2). + \fBTransmission mode:\fR Number of DVB-T OFDM carriers, 32 = 32k, 16 = 16k, 8 = 8k, 4 = 4k, 2 = 2k, 1 = 1k. If in doubt, try 8k. +\fBSISO/MISO mode:\fR Specifies the Single-Input/Multiple-Input Single-Output mode (\fB0\fR = SISO, 1 = MISO) (DVB-T2). + \fBHierarchy:\fR If set to 1, this transponder uses two streams, high priority and low priority. If in doubt, try 0 (off). (DVB-T/DVB-T2 only). diff --git a/vdr.c b/vdr.c index ff4688ee..835d33df 100644 --- a/vdr.c +++ b/vdr.c @@ -22,7 +22,7 @@ * * The project's page is at http://www.tvdr.de * - * $Id: vdr.c 3.10 2014/01/26 12:27:51 kls Exp $ + * $Id: vdr.c 3.11 2014/03/16 12:49:13 kls Exp $ */ #include @@ -34,6 +34,9 @@ #include #include #include +#ifdef SDNOTIFY +#include +#endif #include #include #include "audio.h" @@ -845,6 +848,10 @@ int main(int argc, char *argv[]) alarm(WatchdogTimeout); // Initial watchdog timer start } +#ifdef SDNOTIFY + sd_notify(0, "READY=1"); +#endif + // Main program loop: #define DELETE_MENU ((IsInfoMenu &= (Menu == NULL)), delete Menu, Menu = NULL)