1. 07 Jan, 2017 1 commit
  2. 07 Feb, 2015 1 commit
  3. 26 Dec, 2012 1 commit
    • Klaus Schmidinger's avatar
      Version 1.7.33 · 5109addf
      Klaus Schmidinger authored
      VDR developer version 1.7.33 is now available at
      A 'diff' against the previous version is available at
      MD5 checksums:
      7c21451360ac7959d0d95e533d34451c  vdr-1.7.33.tar.bz2
      c79257198f8569bc02f43dc470ee3076  vdr-1.7.32-1.7.33.diff
      This is a developer version. Even though I use it in my productive
      environment. I strongly recommend that you only use it under controlled
      conditions and for testing and debugging.
      This version of VDR no longer sets LC_NUMERIC to "C" in order to make
      sure any floating point numbers written to configuration files use a
      proper decimal point. It rather explicitly converts such numbers using the
      new functions atod() and dtoa().
      export LC_NUMERIC=C
      From the HISTORY file:
      - In order to be able to play TS recordings from other sources, in which there is
        more than one PMT PID in the PAT, 'int cPatPmtParser::PatPmt(void)' has been changed
        to 'bool cPatPmtParser::IsPatPmt(int Pid)'.
      - Fixed learning remote control keys with the LCARS skin.
      - Updated the Macedonian OSD texts (thanks to Dimitar Petrovski).
      - Fixed getting only non-video packets in cCuttingThread::GetPendingPackets() (reported
        by Sören Moch).
      - Changed all occurrences of MPEG4 to H264 (pointed out by Sören Moch).
      - Fixed getting the number of editing sequences in case the last sequence has no actual
        end mark.
      - The cutter now only increments the TS continuity counter for packets that have a
        payload (pointed out by Sören Moch).
      - Fixed adjusting the DTS values in the cutter, to compensate for dropped B-frames
        (pointed out by Sören Moch).
      - Fixed a typo in skins.h (thanks to Lars Hanisch).
      - Simplified calculating the PTS offset in cPtsFixer::Fix() and fixed the overflow
        handling of PCR values (thanks to Sören Moch).
      - Fixed calling iconv_close() only with a valid iconv_t value (thanks to Juergen Lock).
      - Fixed faulty opening of the Recordings menu when pressing the Play key during normal
        live viewing mode in case there is a "last viewed" recording.
      - Fixed some #include statements in plugins to use <vdr/...> instead of "vdr/..."
        (thanks to Lars Hanisch).
      - Fixed some spellings in osd.h and svdrp.c (thanks to Ville Skyttä).
      - Fixed handling lowercase polarization characters in channel definitions if no DiSEqC
        is used (reported by Mike Hay, actual bug pointed out by Stefan Huelswitt).
      - Synchronizing system time to the transponder time is now done using adjtime() in order
        to avoid discontinuities (suggested by Manuel Reimer). If the time difference is more
        than 10 seconds, stime() is still used to do the initial sync.
      - The '7' and '9' keys now jump to the very beginning or end, respectively, of the
        recording, even if there is no mark set at that point (following a request from
        Andre Weidemann).
      - Now always setting the TDT EIT filter, because otherwise when turning on using the
        transponder time in the Setup menu, it would only be used after the next restart
        of VDR (thanks to Sundararaj Reel).
      - The new functions cDevice::CanScaleVideo() and cDevice::ScaleVideo() can be used by
        derived output devices to implement scaling the video to a given size and location
        (based on a suggestion by Lucian Muresan).
      - The SVDRP command HITK now discards any keys if the remote control is currently
        turned off (thanks to Alexander Hans).
      - The new remote control key "Play/Pause" can be used with remote controls that don't
        have separate keys for "Play" and "Pause", but rather have a single key for both
        functions (thanks to Stefan Hofmann for suggesting to implement support for such
        remote controls).
      - The new option "Setup/Replay/Pause on mark set" can be used to activate automatically
        going into Pause mode if an editing mark is set during replay (suggested by Andre
      - When regenerating the index of a recording, the frame rate stored in the info file
        is now automatically fixed if it differs from the value detected by the frame
      - Fixed creating the edited version directory if a relative file name is given in
        the call to 'vdr --edit' (the '/video' part was stripped from the given file name
        even if it wasn't there).
      - The new option "Setup/Replay/Progress display time" can be used to activate
        automatically displaying the progress display whenever replay of a recording is
        started (suggested by Stefan Blochberger).
      - Changed reading and writing of floating point numbers into configuration files to
        make it independent of the decimal point used in the current locale. All calls to
        atof() have been replaced with the new function atod(), which makes sure the string
        representation of a floating point number using a '.' as decimal point will be
        handled correctly, even if the locale in use expects a ',' as the decimal point.
        Plugins that read floating point numbers from their own configuration files will
        also need to use atod() for this, or use a method of their own (this is not necessary
        if values are stored in VDR's setup.conf file, because VDR takes care of this).
        The reason for these changes is that floating point numbers presented to the user
        shall be displayed in the way defined by the current locale (suggested by Stefan
        If you use plugins that store floating point values in configuration files of their
        own and have not yet been adapted to this change, you should set
        export LC_NUMERIC=C
        before running VDR. Otherwise your plugin's configuration data may not be read or
        written correctly.
      - The new functions SetItemEvent(), SetItemTimer(), SetItemChannel() and
        SetItemRecording() of the cSkinDisplayMenu class can be reimplemented by skin
        plugins to display these items in a more elaborate way than just a simple line of
  4. 06 Jun, 2010 1 commit
    • Klaus Schmidinger's avatar
      Version 1.7.15 · c2c45d68
      Klaus Schmidinger authored
      - Added Macedonian language texts (thanks to Dimitar Petrovski).
      - Updated the Estonian OSD texts (thanks to Arthur Konovalov).
      - Updated the Finnish OSD texts (thanks to Rolf Ahrenberg).
      - Added handling of EnhancedAC3DescriptorTag (thanks to Eric Valette).
      - The default SVDRP port is now 6419 (registered with ICANN/IANA by Christian Tramnitz).
        Use '-p 2001' to switch back to the old port if necessary.
      - Updated the Italian OSD texts (thanks to Diego Pierotto).
      - cDvbDevice::ProvidesTransponder() now checks the modulation capabilities of the
        device (as far as the driver allows this).
      - Fixed cFrameDetector::Analyze() in case part of the data has been processed and
        there is less than MIN_TS_PACKETS_FOR_FRAME_DETECTOR left (reported by Derek Kelly).
      - Added a note about not deleting cDeviceHook objects to device.h.
      - Added user defined key kUser0 (suggested by Ulf Kiener).
      - Include paths are now added instead of overwriting INCLUDES in the Makefile (thanks
        to Paul Menzel).
      - The various modulation types are now taken into account when selecting a device for
        a recording or live viewing, so that devices that provide more capabilities are
      - Fixed generating PMT language descriptors for multi language PIDs (thanks to Rolf
      - Transponders that use "8psk turbo fec" (a non-standard mode used by North American
        providers) are now identified by assuming that all 8psk transponders on DVB-S use
        "turbo fec". In order to determine whether a certain device can handle "turbo fec",
        the new driver flag FE_CAN_TURBO_FEC is checked. If your device can handle "turbo
        fec", and your driver doesn't have that flag, yet, you can apply the patch from
        ftp://ftp.tvdr.de/vdr/Developer/v4l-dvb-add-FE_CAN_TURBO_FEC.diff. A temporary
        macro in dvbdevice.c defines the flag for all those who don't need this in the
        driver, so that they can continue using an unmodified driver.
        Thanks to Derek Kelly for testing this.
      - Updated the Ukrainian OSD texts (thanks to Yarema Aka Knedlyk).
      - Fixed handling "none" color entries in XPM files (thanks to Thomas Günther).
      - Fixed a crash when creating a new channel if the channel list is empty (reported
        by Halim Sahin).
      - Updated the Czech OSD texts (thanks to Radek Stastny).
      - Fixed a possible out of buffer memory access in case of bad TS data (reported
        by Rolf Ahrenberg).
      - Implemented handling of HD resolution subtitles according to v1.3.1 of
        ETSI EN 300 743, chapter 7.2.1 (thanks to Rolf Ahrenberg).
      - The EPG data now handles stream components 5 (H.264-video) and 6 (HEAAC-audio).
      - Fixed a problem with external Dolby Digital processing via the '-a' option in live
        mode and with TS recordings (reported by Christopher Reimer).
      - Added handling MPEG audio types "ISO/IEC 14496-3 Audio with LATM transport syntax"
        and "ISO/IEC 13818-7 Audio with ADTS transport syntax" (suggested by Luis Fernandes).
        See man vdr(5) on how the APID section of channels has been extended to store
        this information.
      - Added detecting channels that use service type 0x16.
      - Added full handling of the stream types of Dolby Digital pids
        (thanks to Jose Alberto Reguero).
      - The new setup option "OSD/Number keys for characters" can be used to control whether
        the number keys can be used to enter characters in a text input field (suggested
        by Stefan Huskamp).
  5. 13 Apr, 2008 1 commit
    • Klaus Schmidinger's avatar
      Version 1.7.0 · 771986b8
      Klaus Schmidinger authored
      - Re-implemented handling of DVB-S2, which first appeared in version 1.5.14, but was
        revoked in version 1.5.15 in favor of making a stable version 1.6.0. VDR now
        requires the "multiproto" DVB driver, e.g. from http://jusst.de/hg/multiproto.
        Note that the channels.conf file now supports additional parameters, so you may
        want to make sure you have a backup of this file in case you need to go back to
        the previous version of VDR!
      - Fixed displaying transponder data when it is modified (thanks to Reinhard Nissl).
      - Fixed handling the counter in detection of pre 1.3.19 PS data (thanks to Reinhard
      - Improved logging system time changes to avoid problems on slow systems under
        heavy load (suggested by Helmut Auer).
      - Now setting the thread name, so that it can be seen in 'top -H' (thanks to Rolf
      - Fixed initializing the timer's flags in the cTimer copy constructor (thanks to
        Andreas Mair).
      - Fixed setting the OSD level in the 'osddemo' example (thanks to Wolfgang Rohdewald).
      - Increased the time between checking the CAM status to 500ms to avoid problems
        with some CAMs (reported by Arthur Konovalov).
  6. 17 Feb, 2008 1 commit
    • Klaus Schmidinger's avatar
      Version 1.5.15 · 9279cb21
      Klaus Schmidinger authored
      - Updated the Italian OSD texts (thanks to Diego Pierotto).
      - Added option -i to the pictures plugin's pic2mpg to ignore unknown file types.
      - Revoked the switch to the "multiproto" driver in order to make a new stable
        version before making this big switch and forcing all users to install a
        driver that is not yet in the kernel source. The removed code will reappear
        in version 1.7.0.
        Note that you may need to switch back to an older version of your channels.conf
        file if you have already used version 1.5.14, because it introduced new parameters.
      - Added the new command line option --userdump to enable core dumps in case VDR
        is run as root with option -u (thanks to Hans-Werner Hilse).
      - Speeded up anti-aliased font rendering by caching the blend indexes (based on
        a suggestion by Martin Wache).
      - Fixed setting the OSD area in the pictures plugin.
      - Ignoring "repeat" and "release" keys in the time search entry mode during replay,
        to avoid inadvertently leaving it in case a key is pressed too long (suggested
        by Andreas Brugger).
      - Improved sending all frames to devices that can handle them in fast forward
        trick speeds, including subtitles (thanks to Timo Eskola).
      - The section handler is now stopped before the device is destroyed, to avoid
        accessing file handles after they have become invalid (thanks to Reinhard
        Nissl for reporting an invalid access when ending VDR, and to Deti Fliegl for
        a patch that was used to implement StopSectionHandler()).
      - Fixed setting the date in the channel display of the classic and sttng skins,
        to avoid unnecessary OSD access (thanks to Marco Schlüßler).
      - The free disk space is now also displayed in the title of the "Recordings"
        menu (suggested by Walter Koch).
      - Changed the message "Upcoming VPS recording!" to "Upcoming recording!" because
        it applies to non-VPS recordings as well.
      - Fixed a loss of a timer's 'recording' flag after modifying it via MODT.
      - Fixed detecting directories in cFileNameList::Load().
      - Running the thread that removes deleted recordings at a low priority to (maybe)
        avoid stuttering replay in case the thread is run during replay.
      - Limiting the length of the recording name in timers in case VDR is run with
        --vfat, in order to avoid names that are too long for Windows (suggested by Rolf
      - Using cString::sprintf() instead of asprintf() (thanks to Wolfgang Rohdewald
        for pointing out a possible problem if the return value is not checked).
        Plugin authors may want to consider doing the same. For convenience there is now
        an additional version of cString::sprintf() that accepts a va_list parameter.
      - When deleting the recording that is currently replayed, the replay is now
        stopped immediately (thanks to Mikko Matilainen for reporting a possible crash
        if the Info key is pressed after deleting the currently replayed recording).
      - Updated the Russian OSD texts (thanks to Oleg Roitburd).
      - When determining the amount of free disk space, any deleted (but not yet removed)
        recordings on different file systems (that are mounted under the video directory)
        are no longer taken into account.
      - When running out of disk space during a recording, only such deleted or old
        recordings are removed, that actually are on the video directory file system(s).
        This prevents VDR from accidentally deleting recordings on other file systems,
        which would not add any free space to the video directory.
      - Implemented the cStatus, cDevice and cPlayer functions for setting subtitle tracks
        in plugins (thanks to Petri Hintukainen).
      - Added cStatus::TimerChange() to inform plugins about changes to the list of timers
        (based on a patch from Benedikt Elser).
      - Added new cStatus functions to the 'status' plugin.
      - Added missing #include <limits.h> to epg.c and menuitems.h (thanks to Ville Skyttä).
      - The new function cSkin::SetScrollbar() can be implemented by skins to display
        a scrollbar in every list menu. The 'classic' and 'sttng' skins have been
        changed accordingly, as well as the 'skincurses' plugin.
      - Introduced 'operator const void * ()' in cString to catch cases where operator*()
        should be used.
      - Fixed calculating the scrollbar sizes in the skins.
  7. 14 Oct, 2007 1 commit
    • Klaus Schmidinger's avatar
      Version 1.5.10 · dbf38b7c
      Klaus Schmidinger authored
      - Implemented handling DVB subtitles (thanks to Marco Schlüßler, and also to
        Pekka Virtanen for writing the subtitle plugin, which helped in implementing
        subtitle handling in VDR).
      - The new remote control key "Subtitles" can be used to bring up the list
        of available subtitles.
      - The new setup option "DVB/Subtitle languages" can be used to define the
        preferred languages for subtitles.
      - Fixed selecting the audio track when pressing Ok in the Audio menu (thanks
        to Marco Schlüßler).
      - Implemented display of DVB subtitles in live viewing mode.
      - Implemented subtitle track selection.
      - Implemented bitmap color reduction and shrinking to display subtitles even
        on devices that can't display the necessary number of colors.
      - Added compatibility mode for playback of recordings made with the subtitles
        plugin (with some help from Rolf Ahrenberg).
      - The new setup option "DVB/Subtitle offset" can be used to shift the location
        of the subtitles in the vertical direction.
      - The new setup options "DVB/Subtitle foreground/background transparency"
        define an additional level of transparency for the foreground and background
        color of subtitles.
      - Existing recordings made with the subtitle plugin can be given an 'X' record
        in their info.vdr file, so that subtitles can be automatically selected upon
        replay, according to the preferred language setup, as in
        X 3 03 ger deutsch
        (see vdr.5). Note that these entries need to be added in the proper sequence,
        so that they correspond with the actual track languages in the recording.
      - Now generating translation files without line numbers to avoid unnecessarily
        large diffs. Plugin authors may want to replace the -F option with
        --no-location in the xgettext and msgmerge calls in their Makefiles.
      - Updated the Finnish OSD texts (thanks to Rolf Ahrenberg).
      - Added a missing Channels.SetModified(true) call when deleting or moving a
        channel in the Channels menu (reported by Halim Sahin).
      - Fixed a missing '-' at the next to last line of SVDRP help texts (reported by
        Denis Knauf).
      - Added a missing SetVolumeDevice() call in cDevice::SetPrimaryDevice() (reported
        by Reinhard Nissl).
      - Fixed a crash when pressing Left while at the first character of a cMenuEditStrItem
        (thanks to Christian Wieninger).
      - Only creating a new cDvbOsdProvider in cDvbDevice::MakePrimaryDevice() if 'On'
        is true (i.e. this device is being made the primary device).
      - Updated the Italian OSD texts (thanks to Diego Pierotto).
      - Fixed handling reallocated memory in cCharSetConv::Convert() (reported by Udo
      - Fixed a new[]/delete mismatch in cMenuEditStrItem::LeaveEditMode() (thanks to
        Udo Richter).
      - Implemented sending all frames to devices that can handle them in fast forward
        trick speeds (thanks to Timo Eskola).
      - Updated the Hungarian language texts (thanks to Thomas Günther).
      - Fixed description of DeviceSetAvailableTrack() and cReceiver(), and added an
        example ~cMyReceiver() in PLUGINS.html (thanks to Marco Schlüßler).
      - Improved the description of where logging goes in the INSTALL file (thanks to
        Elias Luttinen).
      - Added a note about how to initiate internationalization support to the
        README.i18n file. The Makefile generated by the 'newplugin' script now has the
        'i18n' target automatically create an initial 'po/pluginname.pot' file.
        Plugin authors may want to add the '$(I18Npot)' dependency to the 'i18n'
        target in their Makefiles, as in
        i18n: $(I18Npot) $(I18Nmo)
        (based on a suggestion by Torsten Kunkel).
      - Removed a duplicate ',' from the ca_ES.po file (thanks to Thomas Günther).
      - Added the 'ß' character to the "allowed characters" in the de_DE.po file
        (suggested by Thomas Günther).
      - Made the default copy ctor of cRecording private (thanks to Markus Hahn).
        Same for the assign operator.
      - Added cRecording::Undelete() (based on a patch from Markus Hahn).
      - Added cDevice::CloseFilter() to allow a device to have complete control over
        both opening and closing section filters (thanks to Rolf Ahrenberg).
      - Some fixes to PLUGINS.html (thanks to Rolf Ahrenberg).
  8. 12 Aug, 2007 1 commit
    • Klaus Schmidinger's avatar
      Version 1.5.7 · 4c65b525
      Klaus Schmidinger authored
      - All logging now goes to LOG_ERR, because some systems split error, info and
        debug messages into separate files, which repeatedly caused extra efforts to
        find out when incomplete log excerpts were attached to problem reports in
        the past.
      - Updated the Estonian OSD texts (thanks to Arthur Konovalov).
      - Fixed a problem with characters >0x7F in the modified version of skipspace()
        (thanks to Marco Schlüßler).
      - Fixed a bug I introduced when simplifying the original patch for detecting
        Premiere NVOD channel links (crash reported by Malte Schröder).
      - Internationalization is now done with 'gettext' (following a suggestion by
        Lucian Muresan). Plugin authors may want to use the Perl script
        'i18n-to-gettext.pl' to convert their internationalized texts to the gettext
        format (see the instructions inside that script file). The function
        cPlugin::RegisterI18n() is still present for compatibility, but doesn't
        have any more functionality. So plugins that don't convert their texts to
        the gettext format will only present English texts.
        See PLUGINS.html, section "Internationalization", for instructions on how
        to make strings in arrays translatable.
        See README.i18n for information on how to create new or maintain existing
      - The three letter language codes and their aliases are stored in i18n.c, and
        each translation file only contains one of them to link that language name
        to the code.
      - The 'newplugin' script has been extended to generate the Makefile section
        for i18n support.
      - The parameter OSDLanguage in 'setup.conf' is now a string and holds the locale
        code of the selected OSD language (e.g. en_US). If Setup.OSDLanguage is not
        set to a particular locale that is found in VDR's locale directory, the
        locale as defined in the system environment is used by default.
      - The list of tracks given in cStatus::SetAudioTrack() is now NULL terminated,
        so that plugins can actually use all the strings in the list, not just the
        one pointed to by Index (thanks to Alexander Rieger).
      - Fixed handling kLeft in the calls to cStatus::MsgOsdTextItem() (thanks to
        Alexander Rieger).
      - Added the "...or (at your option) any later version" phrase to the license
        information of all plugins, and also the 'newplugin' script (suggested by
        Ville Skyttä). Plugin authors may want to consider doing the same.
      - Fixed the link to the GPL2 at http://www.gnu.org in vdr.c (thanks to Ville
      - cBitmap::SetXpm() now checks whether the given Xpm pointer is not NULL, to
        avoid a crash with files that only contain "/* XPM */" (suggested by Andreas
      - Added a debug error message to cReceiver::~cReceiver() in case it is still
        attached to a device (thanks to Reinhard Nissl).
  9. 15 Oct, 2006 1 commit
    • Klaus Schmidinger's avatar
      Version 1.4.3-2 · 9ef312f8
      Klaus Schmidinger authored
      - Fixed clearing an event's Title, ShortText and Description in case the data comes
        from an external source.
      - Updated the Hungarian language texts (thanks to Guido Josten).
      - Fixed a possible crash if cPluginManager::GetPlugin() is called with a NULL
        pointer (thanks to Petri Hintukainen).
      - Fixed displaying the error log message in case an unknown plugin was requested
        in a key macro (thanks to Petri Hintukainen).
      - Keys from expanded key macros are now put into the front of the key queue to
        avoid problems if the queue is not empty at that time (based on a patch from
        Petri Hintukainen).
      - cKeyMacro now has an explicit counter for the number of keys it contains.
      - cRemote::PutMacro() now sets a lock while it expands the macro (thanks to
        Petri Hintukainen).
      - Fixed handling plugins from cRemote::PutMacro() and cRemote::CallPlugin()
        (based on a patch from Petri Hintukainen).
      - Increased the size of the key queue to avoid problems with long key macros.
  10. 17 Apr, 2006 1 commit
    • Klaus Schmidinger's avatar
      Version 1.3.47 · 293ed402
      Klaus Schmidinger authored
      - Updated the Finnish OSD texts (thanks to Rolf Ahrenberg).
      - Fixed a crash when setting the time transponder in the Setup menu, caused by the
        new 'noneString' in cMenuEditChanItem (reported by Thomas Günther).
      - Added NULL checks to some strdup() calls in menuitems.c (suggested by Darren
      - Removed the unnecessary 'value' member from cMenuEditItem.
      - Fixed the initial setting of the time transponder setup parameter (reported
        by Thomas Günther).
      - Fixed unnecessary Set() calls in cMenuEditIntItem::ProcessKey().
      - Allowing a tolerance for symbol rate values that are off by one (thanks to
        Richard Lithvall).
      - Added VBITeletextDescriptorTag, TeletextDescriptorTag, LocalTimeOffsetDescriptorTag
        and PremiereContentTransmissionDescriptor to 'libsi' (thanks to Marco Schlüßler).
      - Using geteuid() to check whether VDR is running as user 'root' (suggested by
        Tobias Grimm).
      - Added a missing "Key$" in skincurses.c (reported by Darren Salt).
      - Reintroduced the log message "deleting plugin: ..." when shutting down VDR (upon
        request by Ville Skyttä, as in the initial patch from Christoph Haubrich).
      - Fixed the vdr.1 man page (a single DVB card can record and do live tv).
      - The preferred audio language is now automatically selected when starting replay.
      - Updated the Danish OSD texts (thanks to Mogens Elneff).
      - The new function cPlugin::Active() can be used by a plugin to indicate that it
        is still busy and the system should not shut down or restart (based on a patch
        from Sascha Volkenandt). See PLUGINS.html for details.
      - Fixed setting the 'Delta' parameter when calling the shutdown script with
        no active timer (reported by Helge Lenz).
      - In order to make sure that plugins are compiled with the same DVB driver header
        files as VDR itself, the definition of DVBDIR has been removed from the VDR
        Makefile. If you are using a driver version that has its header files at a location
        other than /usr/include/linux/dvb, you can define DVBDIR in the Make.config
        file (see also INSTALL). Note that if you already have a Make.config file of your
        own, you should add the lines
        ifdef DVBDIR
        INCLUDES += -I$(DVBDIR)/include
        to its end, as in the new Make.config.template.
        Any reference to DVBDIR should be removed from all plugins' Makefiles, like this:
        --- PLUGINS/src/hello/Makefile  2005/11/11 13:20:14     1.10
        +++ PLUGINS/src/hello/Makefile  2006/04/15 11:58:46     1.11
        @@ -20,7 +20,6 @@
         ### The directory environment:
        -DVBDIR = ../../../../DVB
         VDRDIR = ../../..
         LIBDIR = ../../lib
         TMPDIR = /tmp
        @@ -40,7 +39,7 @@
         ### Includes and Defines (add further entries here):
        -INCLUDES += -I$(VDRDIR)/include -I$(DVBDIR)/include
        +INCLUDES += -I$(VDRDIR)/include
        Thanks to Marco Schlüßler for pointing out this problem.
      - Implemented kNext and kPrev keys (based on a patch from Peter Juszack).
        See MANUAL for details.
      - Implemented kChanPrev (from a patch from Darren Salt).
      - The "Update channels" parameter in the "Setup/DVB" menu has been extended to
        allow updating only the PIDs (see MANUAL for details). When updating to this
        version of VDR, please verify that the setting is as you want it to be, because
        the values have been shifted.
      - The new APIVERSION (see config.h) now allows existing compiled plugins to be
        used with newer versions of VDR, as long as there have been no changes to the
        VDR header files since the last APIVERSION. Existing plugins' Makefiles should
        have all references to VDRVERSION changed to APIVERSION, like this:
        --- PLUGINS/src/hello/Makefile  2006/04/15 11:58:46     1.11
        +++ PLUGINS/src/hello/Makefile  2006/04/16 09:03:50     1.12
        @@ -28,9 +28,9 @@
         -include $(VDRDIR)/Make.config
        -### The version number of VDR (taken from VDR's "config.h"):
        +### The version number of VDR's plugin API (taken from VDR's "config.h"):
        -VDRVERSION = $(shell grep 'define VDRVERSION ' $(VDRDIR)/config.h | awk '{ print $$3 }' | sed -e 's/"//g')
        +APIVERSION = $(shell sed -ne '/define APIVERSION/s/^.*"\(.*\)".*$$/\1/p' $(VDRDIR)/config.h)
         ### The name of the distribution archive:
        @@ -67,7 +67,7 @@
         libvdr-$(PLUGIN).so: $(OBJS)
                $(CXX) $(CXXFLAGS) -shared $(OBJS) -o $@
        -       @cp $@ $(LIBDIR)/$@.$(VDRVERSION)
        +       @cp $@ $(LIBDIR)/$@.$(APIVERSION)
         dist: clean
                @-rm -rf $(TMPDIR)/$(ARCHIVE)
      - If a timer is newly created from within the "Schedule" menu, and its event is
        already running or has its start time within the next two minutes, it now goes
        directly into the "Edit timer" menu in order to allow the user to make further
        changes to timer parameters before the actual recording starts (inspired by
        Christian Wieninger's "epgsearch" plugin).
      - Added format check to syslog_with_tid().
      - Updated the INSTALL file's section about non-VDR files in the video directory
        (since version 1.3.38 disk access is done in a separate thread, so the watchdog
        timer won't hit).
      - Changed the behaviour of the "Use small font" setup option to *always* use the small
        font if set to '2' - even if it would have been a fixed font (suggested by Ronny
      - No longer using characters 0x01 and 0x02 for mapping single quote and slash in
        recording names (thanks to Patrick Fischer for reporting that this was a problem
        with XML). The single quote is not mapped at all, and the slash is interchanged
        with the tilde. Existing recordings will be handled like before, so there is
        no need to actually rename them.
      - The cRemote::CallPlugin() function now has a boolean return value that tells
        the caller whether initiating the plugin call was successful (suggested by
        Reinhard Nissl). If it returns false, another plugin call is currently pending
        and the caller should try again later. This also means that the SVDRP command
        PLUG can now return an error code is the call fails.
      - The new function cPlugin::MainThreadHook() can be used by plugins to perform
        actions in the context of the main program thread. Use this function with great
        care and only of you absolutely have to! See also PLUGINS.html.
  11. 22 Jan, 2006 1 commit
    • Klaus Schmidinger's avatar
      Version 1.3.40 · 446b0e8e
      Klaus Schmidinger authored
      - Fixed a second place where a message should be given when an instant recording
        is started (reported by Jesus Bravo Alvarez).
      - Modified logging so that even on NPTL systems each line in the log file shows
        the individual thread's pid (based on a suggestion from Francois-Xavier Kowalski).
      - Fixed a problem with @plugin in keymacros.conf in case the named plugin is not
        loaded (reported by Franz Gangkofer).
      - Fixed a crash after executing the SVDRP command CLRE, caused by dangling 'schedule'
        pointers from cChannel objects (reported by Malte Schröder).
      - Updated the Finnish OSD texts (thanks to Rolf Ahrenberg).
      - Improved NULL checking in strreplace().
      - Fixed a crash in the Schedule menu with events that have no title (reported by
        Rolf Ahrenberg). cEvent::FixEpgBugs() now assigns a "No title" string to events
        that have no title.
      - Updated the Estonian OSD texts (thanks to Arthur Konovalov).
      - Recordings are now only started if there is at least 300MB free disk space
        (suggested by Markus Hahn).
      - When entering text via the numeric keys, the cursor now automatically advances
        (based on a patch from Rolf Ahrenberg).
      - Updated the Polish OSD texts and the fontosd-iso8859-2.c file (thanks to Jaroslaw
      - Disabled the "buffer reserve" in Transfer Mode. Last chance to complain if you
        really need it - it will be completely removed in the next version. If you are
        experiencing problems with a/v running out of sync, try the latest driver and
        firmware (if you are using a full featured DVB card).
      - Switching channels with the Up/Down or Channel+/Channel- keys now works a lot
        faster when the repeat function kicks in, by not actually switching the
        channel every time, but rather only displaying the channel info and doing
        the final switch when the key is released.
      - The channel display is now updated _before_ the channel is switched.
      - Added a missing initialization of 'timeout' in the cDisplayChannel constructor.
      - Fixed detecting if there can be any useful further input when entering channel
        numbers (thanks to Thomas Bergwinkl).
      - Updated the Spanish OSD texts (thanks to Jesus Bravo Alvarez).
      - Fixed handling the '0' key for switching between the last two channels (thanks
        to Thomas Bergwinkl).
  12. 08 Jan, 2006 1 commit
    • Klaus Schmidinger's avatar
      Version 1.3.38 · da948a50
      Klaus Schmidinger authored
      - Fixed handling second audio and Dolby Digital PIDs for encrypted channels
        (was broken in version 1.3.37).
      - Improved TS/PES conversion to better handle lost TS packets (thanks to
        Reinhard Nissl).
      - Limited the frequency of log messages from the cRepackers.
      - Now using the gettid() syscall to get a thread's pid, so that we get a
        useful value on NPTL systems (suggested by Johannes Stezenbach).
      - Fixed the RCU remote control handling to avoid problems with NPTL (thanks
        to Andreas Share for reporting a lockup with the RCU on NPTL systems).
      - When displaying the amount of free disk space, the space consumed by
        recordings that have been "deleted" but not yet actually "removed" is now
        taken into account (suggested by Christian Vogt).
      - Now avoiding unnecessary disk access when checking if there are deleted
        recordings that need to be removed (reported by Carsten Koch).
      - Fixed handling the DELETEDLIFETIME when removing deleted recordings. Now
        a deleted recording is retained at least DELETEDLIFETIME seconds before
        actually removing it.
        The value of DELETEDLIFETIME has been changed to 300. So after (possibly
        inadvertently) deleting a recording, there will be at least 5 minutes
        in which it can be recovered (unless a new recording immediately requires
        the disk space). The count starts again at 0 every time VDR is started.
      - Fixed a possible crash when displaying the "Low disk space!" message from
        a background thread (thanks to Christof Steininger).
      - Fixed handling OSD areas that have invalid sizes (thanks to Marco Schlüßler).
      - Added a mutex to AssertFreeDiskSpace() to make sure calls from foreground
        and background threads won't interfere.
      - The main menu now dynamically updates its contents in case an instant
        recording or replay stops, etc.
      - The version number of EPG events is now also stored in the epg.data file
        (thanks to Kendy Kutzner).
      - EPG events that are no longer in the currently broadcasted data stream are
        now automatically deleted.
      - Removed an invalid access to Event->schedule in cSchedule::DelEvent().
      - Modified cSchedule::Cleanup() (events are always sorted by time).
      - Schedules are now cleaned up once every hour (not only at 05:00).
      - The "Schedule" and "What's on now/next?" menus are now updated if a timer
        is set or modified.
      - cTimer no longer has its own 'schedule' member, it rather uses that of the
        event it has been set to.
      - The "Red" button in the "Schedule", "What's on now/next?" and "Event" menus
        now immediately creates a timer for the selected event and marks it with 'T'.
        If the event is already marked with 'T', the "Red" button opens the "Edit
        timer" menu for that timer.
      - Removing deleted recordings is now done in a separate thread.
      - Dropped the unused "stop recording on primary interface" stuff.
      - Converting a grabbed image to JPEG is now done with the new function
        RgbToJpeg() (see tools.h).
      - The SVDRP command GRAB now determines the image type (JPEG or PNM) from the
        extension (".jpg", ".jpeg" or ".pnm") of the given file name. The explicit
        'jpeg' or 'pnm' parameter is still accepted for backward compatibility, but
        has no meaning any more.
      - The function cDevice::GrabImage() no longer writes the grabbed image to a
        file, but rather returns a pointer to the image in memory. The wrapper
        function cDevice::GrabImageFile() can be used to write the grabbed image
        directly to a file. Plugins that used the old version of cDevice::GrabImage()
        need to be adapted to the new interface.
      - The new class cBase64Encoder (see tools.h) can be used to encode data in
        base64 (thanks to Bob Withers for publishing his Base64 class).
      - The SVDRP command GRAB now writes the image data to the SVDRP connection
        (encoded in base64) if the given file name consists of only the file
        extension (".jpg", ".jpeg" or ".pnm"), or if only "-" is given as file
        name (based on a suggestion from Darren Salt).
        A simple way of viewing a grabbed image on a remote host is:
        svdrpsend.pl -d <hostname> 'grab -' | sed -n -e 's/^216-//p' -e '1ibegin-base64 644 -' -e '$a====' | uudecode | display -
      - The new command line option '-g' must be given if the SVDRP command GRAB
        shall be allowed to write image files to disk. The parameter to this option
        must be the full path name of an existing directory, without any "..", double
        '/' or symlinks. By default, or if "-g- is given, grabbing to files is
        not allowed any more because of potential security risks.
      - Modified the way the SVDRP command GRAB writes the grabbed image to a file
        to avoid a security hole (CAN-2005-0071, reported by Javier Fernández-Sanguino
        + The file handle is now opened in a way that it won't follow symbolic links
          (suggested by Darren Salt).
        + The given file name is now canonicalized, so that it won't contain any
          ".." or symlinks (suggested by Darren Salt).
        + Grabbing to files is limited to the directory given in the the command
          line option '-g'. By default grabbing to files is not allowed any more.
      - Updated the Greek OSD texts (thanks to Dimitrios Dimitrakos).
      - Changed all "illegal" to "invalid" in error messages (there's nothing "illegal"
        in VDR ;-).
      - When started as user 'root' VDR now switches to a lesser privileged user id,
        keeping the capability to set the system time (based on a patch from Ludwig
        Nussel). By default the user id 'vdr' is used, which can be changed through
        the new command line option '-u'. Note that for security reasons VDR will no
        longer run as user 'root' (unless you explicitly start it with '-u root',
        but this is not recommended!). The 'runvdr' script has been changed to
        use the '-u' option.
      - Changed the API of the functions cStatus::Recording() and cStatus::Replaying(),
        so that they can provide the full file name of the recording. Plugins that use
        these (or the related cStatus::Msg...() functions) need to be adapted
        (suggested by Andreas Brugger).
      - The DVB devices now retune (and, if applicable, resend the DiSEqC data) if
        the lock is lost (based on a patch from Reinhard Nissl).
      - Fixed handling multi byte key sequences in cKbdRemote (based on a patch from
        Jürgen Schneider).
      - Removed unused variables in skinclassic.c and skinsttng.c (thanks to Marco
      - Made the static cControl functions thread safe (thanks to Patrick Fischer).
      - Fixed initializing pthread_mutexattr_t and pthread_rwlockattr_t to avoid
        warnings with g++ 4.1.0 (thanks to Ville Skyttä).
      - Fixed incrementing the 'state' variables in the repacker classes in remux.c
        to avoid warnings with g++ 4.1.0 (reported by Ville Skyttä).
      - The Makefile now reports a summary of failed plugins (thanks to Udo Richter).
      - The cTimer constructor can now take an optional cChannel (suggested by
        Patrick Fischer).
      - Fixed setting the main thread id if VDR is running as a daemon.
      - Fixed handling TS packets in cTS2PES (thanks to Reinhard Nissl).
      - Added cTimer::SetPriority() to set a timer's priority (suggested by Kendy Kutzner).
      - Added cMenuEditStrItem::InEditMode() (suggested by Christian Wieninger).
      - Now using FE_READ_STATUS to read the current frontend status (suggested by
        Holger Wächtler).
      - The "Menu" key now behaves consistently. If there is anything on the OSD, it
        is closed when the "Menu" key is pressed, and if there is nothing on the OSD,
        the "Menu" key opens the main menu (suggested by Luca Olivetti).
      - The new option "Setup/OSD/Timeout requested channel info" can be used to turn
        off the automatic timeout of the channel display in case it was invoked by
        a press of the "Ok" key (suggested by Thiemo Gehrke).
      - A message is now given when an instant recording is started (suggested by
        Helmut Auer). Actually the code was already there, just commented out - don't
        remember why it wasn't active...
      - Removed an obsolete "Summary" text from i18n.c and preceded all key definition
        texts with "Key$" to avoid duplicates (reported by Lucian Muresan).
      - Preceded all button texts with "Button$".
      - Removed obsolete "Eject", "Language" and "scanning recordings..." texts.
      - Added missing #include "thread.h" to dvbspu.c (reported by Gavin Hamill).
      - Disabled the use of "fadvise" in cUnbufferedFile because there have been
        several reports that it causes more problems than it solves (suggested by
        Petri Hintukainen). If you want to use "fadvise", you can activate the line
        //#define USE_FADVISE
        in tools.c.
      - Removed unused 'offset' member from cOsdItem.
      - In the "Channels" menu the numeric keys now position the cursor to the channel
        with the given number (see MANUAL, section "Remote Control Keys", note (3) for
      - The "Mark/Move" function in the "Channels" menu now also works in the non-numeric
        sort modes.
      - The default cOsdObject::Show() now automatically calls cOsdMenu::Display() if
        this is a menu.
      - The new "Info" key brings up information on the currently viewed programme
        or recording. For a live programme this is the same as "Schedule/Ok", i.e. the
        description of the current EPG event. For a recording this is the same as shown
        by the "Info" button in the "Recordings" menu. Plugins that implement players
        can overwrite their cControl::GetInfo() function to show their own info (see
        PLUGINS.html for details). Pressing the "Info" key again while the info is
        displayed will close the OSD. In order to assign this new key to an existing
        remote control setup, the remote.conf file needs to be deleted and VDR has
        to be restarted to go through the process of learning the remote control keys.
      - Any cReceivers still attached to a cDevice when that device switches to a
        different transponder are now automatically detached (suggested by Patrick
      - The "flags" of a timer are now handled as an unsigned integer value. In order
        to do this, the interface of cMenuEditBitItem also had to be changed.
      - In string entry fields (like, e.g., the file name of a recording) the characters
        can now be entered by pressing the numeric keys, the same way as on a
        telephone keypad (based on the "Easy Input" patch from Marcel Schaeben).
      - Fixed the "Day" field of the "Edit timer" menu when pressing '0' to switch
        from "single shot" to "weekly", followed by the "Right" key (reported by
        Andreas Böttger).
      - The file 'ca.conf' is obsolete and has been removed.
      - Revised all descriptions regarding CICAM.
      - Adapted c(Dvb)Device::ProvidesCa() to the dynamic CA handling.
      - Added a mutex to synchronize cDevice::PlayPesPacket() and SetCurrentAudioTrack()
        (thanks to Reinhard Nissl).
      - Added a SleepMs() in cRecorder::Action() to avoid a busy loop (thanks to Ingo
      - Cleaned up some trailing white space.
  13. 25 Sep, 2005 1 commit
    • Klaus Schmidinger's avatar
      Version 1.3.33 · c16bbf74
      Klaus Schmidinger authored
      - Fixed two errors in 'newplugin' (thanks to Alexander Rieger).
      - Fixed converting arbitrarily formatted summary.vdr files (thanks to Thomas Günther).
      - Fixed handling color buttons in cMenuEditStrItem (thanks to Alexander Rieger).
      - Added cChannel::LinkChannels() and cChannel::RefChannel() (suggested by Helmut Auer).
        Note that VDR itself doesn't actually use the linked channels, yet, so there is
        no guarantee that this really works under all circumstances.
      - Added a missing include statement to the 'sky' plugin (thanks to Alfred Zastrow
        for reporting this one).
      - Fixed handling key macros with keys after @plugin (thanks to Rolf Ahrenberg for
        reporting this one).
      - Fixed error handling in cCiTransportConnection::RecvTPDU() (thanks to Georg Acher
        for reporting this one).
      - Removed obsolete 'shift' code in device.[hc].
      - The SVDRP command DELR no longer triggers a complete reload of the global Recordings
        list, but rather deletes that particular entry.
      - The list of recordings is now read in a separate thread, resulting in a faster
        startup if there are a great many of recordings, or the disk(s) have to spin up.
        If the Recordings menu is opened while the list of recordings is still being read,
        the menu will be updated accordingly.
        Plugins that access the global Recordings variable should lock the thread
        by putting something like
          cThreadLock RecordingsLock(&Recordings);
        into the respective code block. Thanks to Carsten Koch for his help in testing
        and debugging this.
      - The 'new' indicator in the Recordings menu is now kept up-to-date (thanks to
        Thomas Günther).
      - Updated the Romanian OSD texts (thanks to Lucian Muresan).
      - Updated the Russian OSD texts (thanks to Oleg Roitburd).
      - The '.update' file in the video directory is now touched when a recording is
        added or deleted, so that other VDR instances can update their lists (thanks to
        Alexander Rieger).
      - Made the function ExchangeChars() public (suggested by Lucian Muresan).
  14. 11 Sep, 2005 1 commit
    • Klaus Schmidinger's avatar
      Version 1.3.32 · d5c85f5f
      Klaus Schmidinger authored
      - Added some missing braces in remux.c (thanks to Wayne Keer for reporting this one).
      - Removed unused MAINMENUENTRY from svdrpdemo.c (thanks to Udo Richter for reporting
        this one).
      - Fixed appending sequence end code in cDvbPlayer::Goto() (thanks to Reinhard Nissl).
      - Fixed syncing in cRepacker (thanks to Reinhard Nissl).
      - Now always using stream id 0xE0 for the video stream, to avoid problems with
        post processing tools that choke on different ids (suggested by Reinhard Nissl).
      - Updated the Estonian OSD texts (thanks to Arthur Konovalov).
      - Fixed cDvbPlayer::SkipFrames() to properly handle radio recordings (thanks to
        Reinhard Nissl).
      - Updated the Swedish OSD texts (thanks to Tomas Prybil).
      - Updated the Slovenian OSD texts (thanks to Matjaz Thaler).
      - Updated the Danish OSD texts (thanks to Mogens Elneff).
      - Made LIRC command parsing more robust (thanks to Ville Skyttä).
      - Introduced a separate 'plugins-install' target in the Makefile (thanks to Daniel
      - Re-introduced the code that waits for a tuner lock in VDR/device.c, since
        apparently some users actually need it. It's not active by default, you'll have
        to define the WAIT_FOR_TUNER_LOCK macro in that file if you need it (suggested
        by Malcolm Caldwell).
      - Adjusted the Makefile to the dvb-kernel driver on kernel 2.6 and up (thanks to
        Lauri Tischler).
      - Repeat keys are now ignored when waiting for a keypress to cancel an operation
        (thanks to Marko Mäkelä).
      - The main menu function of a plugin can now be activated through a key macro of
        the form "@plugin" even if that plugin doesn't have a main menu entry (using
        part of a patch by Hardy Flor, which originally implemented calling plugins from
      - The menu timeout handling is now done centrally in the main program loop.
      - Added missing help for the 'help' keyword in the SVDRP command PLUG.
      - The main menu function of a plugin can now be called programmatically through
        the static function cRemote::CallPlugin().
      - The SVDRP command PLUG now has a new option 'main' which can be used to initiate
        a call to the main menu function of a plugin (using part of a patch by Hardy Flor).
      - The new command line option '--vfat' can be used to make VDR encode special
        characters in recording file names, even if it wasn't compiled with VFAT=1
        (suggested by Peter Bieringer). The compile time option VFAT still exists and
        creates a VDR that always behaves as if it were called with '--vfat'.
      - Replaced the ':' delimiter between hour and minute in recording file names with
        a '.' under Linux, too. Existing recordings with ':' as delimiter will still work.
      - Implemented the SVDRP command MOVC (thanks to Andreas Brachold).
      - Added support for multiple audio language codes in ISO639LanguageDescriptors to
        'libsi' (thanks to Marcel Wiesweg).
      - Changed the audio PID language codes to hold up to two 3 letter codes, separated
        by '+', to store separate languages broadcast in two channel audio mode.
      - If the preferred audio language is broadcast on a PID that has two different
        languages in the two stereo channels, the audio channel is now properly set when
        switching to such a channel (thanks to Mogens Elneff for his help in testing this).
      - Fixed some typos in MANUAL (thanks to Ville Skyttä).
      - Fixed the default value for "Setup/EPG bugfix level" (thanks to Ville Skyttä for
        reporting this one).
      - Fixed defining timers that only differ in the day of week (thanks to Patrick
        Rother for reporting this one).
      - Fixed converting summary.vdr files that would result in a very long 'short text'
        (thanks to Carsten Koch).
      - Implemented a hash for the channels to reduce the system load in the EIT scanning
        thread (based on a patch by Georg Acher).
  15. 09 Jan, 2005 1 commit
    • Klaus Schmidinger's avatar
      Version 1.3.18 · fb5cccb2
      Klaus Schmidinger authored
      - Removed an unused variable from cTimer::GetWDayFromMDay() (thanks to Wayne Keer
        for reporting this one).
      - Some more changes to the 'childTid' handling in cThread (based on suggestions by
        Stefan Huelswitt).
      - Fixed the spelling of 'canceling' (thanks to Wayne Keer for reporting this one).
      - Re-introduced a sleep to cDvbPlayer::Action() to avoid high CPU load in still
        picture mode (thanks to Reinhard Nissl for reporting this one).
      - Fixed a possible race condition in generating the DVB device names (thanks to
        Rainer Zocholl for reporting this one).
      - Changed the way PES packets are played to allow replay of AC3 sound over the
        full featured DVB cards (partially based on a patch from Werner Fink).
        + The new function cDevice::PlayPes() is now called with the complete PES data
          stream and calls PlayVideo() and PlayAudio() as necessary.
        + cDevice::PlayVideo() is now only called with actual video PES packets.
        + cDevice::PlayAudio() is now called with the actual audio PES packets, which
          can be either "normal" audio or AC3 data. You need at least firmware version
          0x261d to replay AC3 sound over a full featured DVB card. This function now
          has an 'int' return value.
        + PlayAudio() of derived cDevice classes shall no longer call the base class
          function. It shall just play the given data as audio.
        + cPlayer::PlayVideo() and cPlayer::PlayAudio() are now obsolete and have been
          replaced with cPlayer::PlayPes().
        + All StripAudioPackets() functions are now obsolete. The functionality has been
          moved into cDevice::PlayPes(), where only the video and audio packets that are
          actually required will be processed.
        + All audio track handling is now done by cDevice; cTransfer and cDvbPlayer no
          longer care about audio tracks. cPlayer, however, still has the virtual hooks
          for audio track handling in order to allow plugins to implement players that
          have their own idea about this.
        + cChannel::[AD]pid[12]() have been replaced with cChannel::[AD]pid(int i) to
          allow access to all available PIDs.
      - Escaped the '-' and 'ö' characters in the man pages (thanks to Darren Salt for
        pointing this out).
      - Completed the Italian OSD texts (thanks to Sean Carlos).
      - Fixed setting 'synced' in cRemux when recording radio channels (thanks to
        Laurence Abbott).
      - Removed the LOCK_THREAD from the LIRC thread (thanks to Ludwig Nussel).
      - Fixed genfontfile.c (sometimes the character width was wrong, and the codes were
        shifted one too far to the left).
      - Fixed the character width and shifted the codes one to the right in all font
      - Renamed font???.c to font???-iso8859-1.c for symmetry.
      - Switched the character set to iso8859-15 for English, German and Finnish (thanks
        to Andreas Brugger for reporting the missing Euro sign in iso8859-1).
      - Added 'channels.conf.terr' entries for Lübeck (thanks to Stefan Hußfeldt).
      - Fixed a race condition in starting a thread (thanks to Reinhard Nissl for
        reporting this one).
      - Replaced non-threadsafe library functions with their threadsafe versions (thanks
        to Rainer Zocholl for pointing this out).
      - Other non-threadsafe functions have been replaced by threadsafe classes that hide
        the actual buffering. In particular these are:
        readdir() -> cReadDir
        readline() -> cReadLine
      - Several formerly non-threadsafe functions now have a return type of cString:
        When using these functions in a 'const char *' context there is nothing special
        to consider, except that you can no longer have a pointer to the return value,
        as in
        const char *date = DayDateTime();
        Although this will compile without error message, the resulting 'date' will not
        be valid after this line. Use this instead:
        cString date = DayDateTime();
        In a 'const void *' context (as in printf() etc.) the result needs to be
        dereferenced with a '*', as in
        printf("%s", *DayDateTime());
        to make it a 'const char *'.
      - Removed delay_ms(), using cCondWait::SleepMs() instead.
      - Replaced time_ms() with a threadsafe and non-overflowing cTimeMs (thanks to Rainer
        Zocholl for pointing out this problem).
      - Added cDevice::mutexReceiver to avoid a race condition when attaching/detaching
        receivers from different threads.
      - The new remote control button "Audio" can be used to switch between different
        audio tracks. The "Green" button in the "Main" menu has been changed from "Language"
        to "Audio", since it now also controls switching between normal and Dolby Digital
        audio tracks (see MANUAL for details).
      - The description of the audio tracks is now taken from the "component descriptors"
        that are broadcast in the EPG data. However (as no big surprise), not all channels
        actually provide useful data here, so there are now some additional EPG bugfixes,
        which can be activated by setting the "EPG bugfix level" to 3.
      - The format of the 'epg.data' files has been extended by the new tag 'X', which
        contains the stream components of an event (see man vdr(5) for details).
      - The cStatus class now has the new member function SetAudioTrack(), which can be
        used to get notified when the audio track has been switched, and the new member
        function SetAudioChannel() which is called when the audio channel is changed.
      - Skins need to implement the new cSkinDisplayTrack class to display the audio
        track menu.
      - The ST:TNG skin now displays the current audio track description (if any) at the
        botton left side.
      - The new setup option "DVB/Audio languages" can be used to control which audio
        language shall be selected in case a channel broadcasts in different languages
        (see MANUAL for details).
      - The "Left" and "Right" keys in the "Audio" menu can be used to switch between
        the left and right stereo channels in case there are different audio tracks
        in these channels (see MANUAL for details).
      - Fixed a possible race condition in cDevice::Action() (thanks to Mattias Grönlund).
      - Fixed the default quality value when grabbing a JPEG image (thanks to Patrick
      - Fixed deleting a menu item in case the next item is not selectable (thanks to
        Dino Ravnic).
      - Implemented displaying mandatory subtitles in the SPU decoder (thanks to Marco
      - The setup option "Recording/Record Dolby Digital" has been renamed and moved to
        "DVB/Use Dolby Digital". It now controls whether Dolby Digital is recorded and
        whether an available DD audio track will appear in the "Audio" menu.
      - Added support for circular polarization (thanks to Jonan Santiago).
      - Thanks to Werner Fink, Reinhard Nissl, Sascha Volkenandt and Bjørnar Nilsen for
        their support in testing and fine tuning this version.
  16. 14 Sep, 2003 1 commit
    • Klaus Schmidinger's avatar
      Version 1.2.5pre3 · 3feeb907
      Klaus Schmidinger authored
      - Fixed dropping out of replay mode while viewing a recording that is still
        going on (thanks to Oliver Endriss for reporting and helping to debug this
      - Fixed handling ':' characters in channel names when reading channels.conf
        (thanks to Reinhard Nissl for reporting this one).
      - Fixed the URL to the 'Doxygen' tool in INSTALL (thanks to Dirk Essl).
      - Removed the obsolete chapter "Stopping a recording on the primary DVB interface"
        from MANUAL.
      - Completed Dutch language texts (thanks to Hans Dingemans).
      - Made 'diseqc.conf' a required file only if Setup.DiSEqC is activated (thanks to
        Thomas Schmidt).
      - VDR now starts up even if 'keymacros.conf' references a plugin that is currently
        not loaded (suggested by Alexander Wetzel).
      - Fixed checking for VIDEO_STREAM_S in cRemux::SetBrokenLink() (thanks to Oliver
      - Added 'repeat' function to keys '7' and '9' ("jump to mark") in replay mode
        (suggested by Oliver Endriss).
      - Made cOsdMenu::Display() virtual, which allows plugins to do some additional
        processing after calling the base class function (suggested by Jan Rieger).
      - Updated 'ca.conf' (thanks to Marco Franceschetti).
  17. 01 Dec, 2002 1 commit
    • Klaus Schmidinger's avatar
      Version 1.1.18 · 96ebdbf4
      Klaus Schmidinger authored
      - Fixed missing initialization of 'number' in cChannel (thanks to Martin Hammerschmid
        for reporting this one).
      - Fixed a misplaced ')' in the fix about the stale lock files (thanks again to
        Oliver Endriss for pointing this out - it was my fault).
      - Group delimiters in the 'channels.conf' file that have no text (like a simple ":"
        or ":@201") no longer show up in the Channels menu (suggested by Guy Roussin).
      - Added "Tele 5" to 'channels.conf' (thanks to Georg Hitsch).
      - Changed the source directory name for plugins from 'SRC' to 'src' (suggested by
        Clemens Kirchgatterer).
      - Removed transponders 10788, 11739 and 12266 from 'channels.conf' (apparently they
        are no longer active).
      - Deactivated some templates in tools.h in case some plugin needs to use the STL
        (suggested by Gerald Berwolf).
      - Timers now accept channel IDs even if the 'source' is 0 (thanks to Stefan Huelswitt
        for reporting this one).
      - Now taking an active SVDRP connection into account when doing shutdown or
        housekeeping (suggested by Emil Naepflein).
      - Macros in 'keymacros.conf' can now use "@plugin" to directly access the main menu
        function of a given plugin (see man vdr(5) for details).
      - The new plugin 'sky' can be used to integrate a Sky Digibox into the VDR system,
        using a Kfir MPEG2 encoder card (see PLUGINS/src/sky/README for details).
  18. 27 Oct, 2002 1 commit
    • Klaus Schmidinger's avatar
      Version 1.1.14 · 57bd7eee
      Klaus Schmidinger authored
      - Fixed some faulty default parameter initializations (thanks to Robert Schiele).
      - Added further satellites to 'sources.conf' (thanks to Reinhard Walter Buchner
        and Oliver Endriss).
      - Updated Finnish OSD texts (thanks to Jaakko Hyvätti).
      - Fixed a small glitch when switching channels (thanks to Dennis Noordsij for
        reporting this one).
      - Fixed handling multiple 'CaCaps' entries in 'setup.conf'.
      - Group separators in 'channels.conf' may now be given like ':@201 My Channels',
        where '@201' indicates the number to be given to the next channel. This can be
        used to create 'gaps' in the channel numbering (see 'man 5 vdr'). BE CAREFUL
        'channels.conf' FILE!
      - Timers now internally have a pointer to their channel (this is necessary to
        handle gaps in channel numbers, and in preparation for unique channel ids).
      - Fixed slow reaction on SVDRP input (thanks to Guido Fiala for reporting this one).
      - Added KI.KA to channels.conf.cable (thanks to Robert Schiele).
      - Frequency values for cable and terrestrial channels in 'channels.conf' can
        now be given either in MHz, kHz or Hz. The actual value given will be multiplied
        by 1000 until it is larger than 1000000.
      - Fixed skipping unavailable channels when zapping downwards.
      - Fixed checking the Ca() status of a cDevice (thanks to Stefan Huelswitt).
      - Fixed switching audio tracks in 'Transfer Mode' on the primary DVB device
        (thanks to Steffen Barszus and Stefan Huelswitt for reporting this one and
        helping to fix it).
      - Fixed channel switching in case of an active 'Transfer Mode' on the primary
        device ('Transfer Mode' is now launched with priority '-1').
      - Fixed a ternary expression in dvbspu.c.
      - Fixed handling 'Transfer Mode' on single device systems when recording an
        encrypted channel (thanks to Stefan Huelswitt).
      - Fixed blocking replaying in case an encrypted channel is being recorded on
        the primary device.
      - Now the name of the remote control is displayed when learning the keys.
      - Fixed learning remote control keys in case there is more than one remote
        control (thanks to Oliver Endriss for reporting this one).
      - Implemented additional dedicated keys for "Play", "Pause", "Stop", "Record",
        "FastFwd", "FastRew", "Channel+" and "Channel-". If your remote control supports
        any of these keys you can delete your 'remote.conf' file and restart VDR to
        go through the key learning procedure again in order to assign these new keys.
        See MANUAL for more information.
        Authors of player plugins should update their ProcessKey() functions so that
        the new player keys have the same functionality as the "Up", "Down", "Left",
        "Right" and "Blue" keys, respectively. Note that the existing functionality
        of these keys should by all means be retained, since VDR (and any plugins)
        shall be fully usable with just the basic set of keys. These new keys are only
        for additional comfort in case the remote control in use supports them.
      - Implemented new keys to directly access the VDR main menu functions "Schedule",
        "Channels", "Timers", "Recordings", "Setup" and "Commands". If your remote
        control provides keys you want to assign these functions to, you can delete
        your 'remote.cof' file and restart VDR to  go through the key learning procedure
        again in order to assign these new keys. See MANUAL for more information.
      - The new configuration file 'keymacros.conf' can be used to assign macros to
        the color buttons in normal viewing mode, as well as to up to 9 user defined
        keys. See MANUAL and man vdr(5) for more information. The default 'keymacros.conf'
        implements the functionality of the "color button patch".
      - Fixed a crash when learning the keys of several remote controls and pressing
        buttons of those that have already been learned (thanks to Oliver Endriss for
        reporting this one).
  19. 29 Sep, 2002 1 commit
    • Klaus Schmidinger's avatar
      Version 1.1.11 · d0807381
      Klaus Schmidinger authored
      - Fixed an incomplete initialization of the filter parameters in eit.c (thanks
        to Jeremy Hall).
      - Fixed the 'newplugin' script for use with the NEWSTRUCT driver (thanks to
        Andreas Schultz for reporting this one). If you have already created a plugin
        directory and Makefile with 'newplugin', please apply the following patch to it:
        --- Makefile    2002/06/10 16:24:06     1.4
        +++ Makefile    2002/09/17 15:36:36     1.5
        @@ -15,7 +15,12 @@
         ### The directory environment:
        +ifdef NEWSTRUCT
        +DVBDIR = ../../../../DVB/include
         DVBDIR = ../../../../DVB/ost/include
         VDRDIR = ../../..
         VDRINC = $(VDRDIR)/include
         LIBDIR = ../../lib
        @@ -34,7 +39,7 @@
        +DEFINES += -DPLUGIN_NAME_I18N='"$(PLUGIN)"'
         ### The object files (add further files here):
        This is the diff for the 'setup' example that comes with VDR, so your line
        numbers may be different.
      - Added a missing 'public' keyword in device.h (thanks to Martin Hammerschmid).
      - Fixed a race condition when starting 'Transfer Mode'.
      - Rearranged the remote control key handling to allow plugins to implement
        additional types of remote controls (see PLUGINS.html, section "Remote Control").
        The previously used files 'keys.conf' and 'keys-pc.conf' have been replaced
        by the file 'remote.conf', which holds the key definitions of all remote controls.
      - The LIRC remote control keys are now handled just like the keyboard and RCU keys.
        This means that you can use the lircd.conf file as is for your remote control,
        without the need of editing it to make the key names the same as used in VDR.
        When first starting VDR it will go into the "Learning keys" mode and ask you
        to press the various keys. The resulting key assignment will be stored in
        the file 'remote.conf'.
        Since I have no way of testing the LIRC support, I hope I didn't break it in
        the process...
      - While learning the remote control keys it is now possible to press the 'Menu'
        key to skip the definition of keys that are not available on your particular
        RC unit.
      - Fixed handling DVD subtitles in the SPU decoder (thanks to Andreas Schultz).
      - Avoiding restarts due to 'panic level' when switching channels on the primary
        device during EPG scan.