[ANNOUNCE] VDR version 2.4.4 released

  • VDR version 2.4.4 is now available at


    A 'diff' against the previous version is available at


    MD5 checksums:

    ccf724c157740b2b153ca41ad38f1217 vdr-2.4.4.tar.bz2

    12845052da407da62748982c01cc5d52 vdr-2.4.1-2.4.4.diff

    You can also get the latest version at the official VDR GIT archive with

    git clone git://git.tvdr.de/vdr.git

    This version fixes a few bugs that came up after the release of version 2.4.1.

    The changes since version 2.4.1:

    - Fixed moving channels between number groups in SVDRP's MOVC command and the Channels

    menu, in case a channel is moved to a higher number and into a numbered group

    (reported by Manuel Reimer).

    - Now retuning if the received transponder's SDT doesn't contain the expected values

    for NID and TID (thanks to Uwe Scheffler for reporting a problem with failed tuning

    in SCR systems, and Helmut Binder for helping with the implementation).

    - Fixed compatibility with current versions of glibc (thanks to Manuel Reimer).

    - The SVDRP command DELC now also accepts a channel id (suggested by Manuel Reimer).

    - Fixed dropping capabilities in case cap_sys_time is not available.

    - Added the language code for Bulgarian (thanks to Helmut Binder).

    - Fixed handling multi part ExtendedEventDescriptors where only the first part

    contains information about the character table (based on a patch from Helmut Binder).

    - When setting the system character table, it is no longer checked against the known

    entries that are hard coded in libsi/si.c, but rather given to iconv_open() and the

    result of that call is used to check whether the given name is valid.

    - Checking whether the system character table is "single byte" is now done by checking

    the result of a sample call to iconv().

    - Setting the override character table now checks and reports whether the given value

    is valid (suggested by Helmut Binder).

    - The isSingleByte parameter in the call to getCharacterTable() is deprecated and only

    present for backwards compatibility.

    - Fixed a possible crash in case replay is started and stopped in rapid sequence, by

    adding missing locking to cControl::Control(). The caller of this function must now

    provide a cMutexLock which stays alive as long as the result of this call is used.

    The old version of this function is still there for backwards compatibility with

    plugins, because this problem appears to occur only under very rare circumstances.

    Authors of plugins that use this function should switch to the new version, because

    the old one is deprecated and will be removed in a future version.

    The version numbers (both VDRVERSNUM and APIVERSNUM) have been bumped to 2.4.2, so

    that plugins can detect the presence of the new cControl::Control().

    - Added a missing '-D' to the 'plugins' target of the Makefile (thanks to Johann


    - Fixed the size of cChannel::dtypes[] (thanks to Winfried Köhler).

    The version numbers (both VDRVERSNUM and APIVERSNUM) have been bumped to 2.4.3 to

    indicate this change.

    - Added a device hook for detecting whether a device provides EIT data (thanks to

    Winfried Köhler).

    - Fixed memory handling in cString::Append() (reported by Stefan Herdler).

    - Revised 'Fixed a possible deadlock when detaching a receiver from a device' from

    version 2.3.9, which sometimes caused a black screen when switching channels

    (thanks to Stefan Verse).

    - Added failsafe defaults for 'make LCLBLD=1' to the Makefile (thanks to Stefan


    - Added codes for more languages and special audio tracks (thanks to Helmut Binder).

    - Added cMtdCamSlot::TsPostProcess() (thanks to Helmut Binder).

    - Added cMtdHandler::StopDecrypting() (thanks to Helmut Binder).

    - Added support for detecting new channels broadcast in HEVC (thanks to Helmut Binder).

    - Added support for detecting 'advanced codec digital radio sound service' (thanks to

    Helmut Binder).

    - Added handling shared PMT pids and multiple PMT sections (thanks to Helmut Binder).

    - Changed the country code in the generated ParentalRatingDescriptor from 'DEU' to

    '902' to make it valid for all countries (thanks to Helmut Binder).

    - Added optional verbose output to the libsi Makefile (thanks to Tobias Grimm).

    - Made the call to pkg_config configurable via the PKG_CONFIG macro, which is necessary

    for cross-building VDR (thanks to Tobias Grimm). Plugin authors may want to modify

    their Makefiles accordingly by adding the line 'PKG_CONFIG ?= pkg-config' and

    replacing every occurrence of 'pkg-config' with '$(PKG_CONFIG)', as can be seen in

    the Makefiles of the plugins that come with the VDR source.

    - Fixed a typo in svdrp.c (thanks to Tobias Grimm).

    - Added support for HEVC-video and AC-4-audio (thanks to Christoph Haubrich).

    - Added a comment about the semantics of cTimeMs::Set().

    - Adjusted device selection in GetDeviceForTransponder() to that in GetDevice() (thanks

    to Helmut Binder).

    - Now adding CPPFLAGS to CXXFLAGS to allow extra preprocessor flags to be given when

    doing make (suggested by Tobisa Grimm).

    - Added CRC check of the CAT in cCaPidReceiver::Receive() (thanks to Helmut Binder).

    - Fixed the 'else if' branch in cDevice::GetDeviceForTransponder(), which hasn't

    been active since version 1.7.29 (reported by Helmut Binder). The original purpose of

    this branch was to use a device that is currently not recording for switching to the

    transponder of an upcoming VPS timer. However, this caused problems with more than

    two bonded devices, which was "fixed" in version 1.7.29. Apparently this fix merely

    rendered the whole code branch inactive. Now this branch is only executed for devices

    that are not bonded.

    - Improved deleting plugins in case the plugin uses its own memory management (thanks

    to Winfried Köhler). Plugins that have been compiled with previous versions of VDR

    do not need to be recompiled, they will silently be handled as before.

    - Now setting currentDisplayChannel = NULL before calling cStatus::MsgOsdClear() in

    ~cDisplayChannel(), to avoid possible problems in case a plugin calls IsOpen()

    (reported by Thomas Reufer).

    - Fixed handling inactive shared CA pids (thanks to Helmut Binder).

    - Implemented handling multi packet CATs with MTD (thanks to Helmut Binder).

    - Fixed a possible 'invalid lock sequence' when switching to an unavailable channel

    with the main menu open.

    - Official release.

    Have fun!


  • Erstmal danke an Klaus für das Bereitstellen der neuen Version :thumbup:

    Für Arch-Nutzer: AUR ist aktuell. Binär-Repo wird aktuell von Travis gebaut. Kann noch etwas dauern, sollte aber eigentlich durchlaufen, denn ich hab den ganzen Satz hier auf meiner lokalen Build-VM schon einmal durchkompiliert. Was kompiliert hat, habe ich nicht genauer angeschaut. Wo es "gehakt" hat habe ich geschaut ob es neue Versionen gibt (war bei channelscan und wirbelscan der Fall).

  • Danke für die neue Version Klaus,

    immer wieder eine große Freude.



  • Was mir aufgefallen ist: VDR-Version ist 2.4.4, API-Version ist 2.4.3. Ist technisch bestimmt korrekt, aus Konsistenzgründen würde ich aber vorschlagen, dass die API-Version der VDR-Version entspricht. Denk' doch bitte an die Distris, die die Plugins alle neu übersetzen.


    System 1: Hardware : ASUS B150M-C, Intel Pentium G4560, DVB cineS2, 1x 2TB HDD, 1x 214GB SSD, Gehäuse Antec Remote Fusion Black, 8 GB DDR4 RAM.
    Software : Fedora 31, vdr 2.4.1, softhddevice GIT, Kernel 5.4.20
    System 2: Hardware : Intel NUC5PPYB, Intel Pentium N3700, DVB TechnoTrend TT-connect S2-4600 USB, 1x 1TB HDD, 8 GB DDR3 RAM.
    Software : Fedora 32, vdr 2.4.1, softhdcuvid GIT, Kernel 5.6.2

  • Die Distributionen haben doch sowas wie "vdr-api" oder "vdr-abi" das unabhängig gewählt werden kann.

    Bei Arch war das eigentlich kein Thema. Versionsnummer vom VDR und vdr-api können da unterschiedlich versioniert werden und die Plugins haben nur eine Abhängigkeit zur vdr-api und nicht zum VDR selbst.

    Die ganze Idee ist doch das das Interface für Plugins (API) unabhängig versioniert ist. Wenn Klaus einen Fix nachreicht der die Header-Files nicht ändert, dann müssen in dem Fall nicht alle Plugins neu übersetzt werden.

  • Ja, das ist das, was ich meinte: technisch korrekt: Aber 2.4.3 war kein stable release und wenn jetzt die Plugins .2.4.3 als Suffix haben, vdr aber 2.4.4, ist das etwas verwirrend. Ich denke, es ist einfacher, bei so wenigen Releases die Versionsnummern synchron zu halten. Hat Klaus selbst bei der 2.4.0 gemacht (die glaube ich API-kompatibel zur letzten 2.3.9 ist), um Verwirrung zu vermeiden.

    System 1: Hardware : ASUS B150M-C, Intel Pentium G4560, DVB cineS2, 1x 2TB HDD, 1x 214GB SSD, Gehäuse Antec Remote Fusion Black, 8 GB DDR4 RAM.
    Software : Fedora 31, vdr 2.4.1, softhddevice GIT, Kernel 5.4.20
    System 2: Hardware : Intel NUC5PPYB, Intel Pentium N3700, DVB TechnoTrend TT-connect S2-4600 USB, 1x 1TB HDD, 8 GB DDR3 RAM.
    Software : Fedora 32, vdr 2.4.1, softhdcuvid GIT, Kernel 5.6.2

  • Der Übergang von 2.3.9 zu 2.4.0 war von einer Developer- (2.3.x) zu einer Stable-Version (2.4.x), daher der saubere Schnitt (auch wenn er nicht nötig gewesen wäre). Innerhalb einer Developer- oder Stable-Version halte ich es schon für sinnvoll, die APIVERSION nur dann hochzusetzen, wenn es wirklich notwendig ist. Es steht natürlich jedem frei, diese selber auf 2.4.4 zu setzen.

    Es recht zu machen jedermann, ist eine Kunst, die keiner kann ;-).

  • Wenn man Plugins als eine Art von 'nachladbarer Library' sieht, dann muss nur die Schnittstelle zum VDR binary passen.

    Und es macht schon Sinn, fertige Plugin binaries weiter zu nutzen, wenn sich die Schnittstelle VDR <-> Plugin nicht geändert hat.

  • Im Prinzip wäre es sogar sinnvoll die API-Version komplett von der VDR-Version zu entkoppeln. Dann bräuchte Klaus auch keine "Pseudo-Releases" mehr im GIT um den Nutzern zu signalisieren das die Plugins neu gebaut werden müssen. Stattdessen nur die unabhängige API-Version hochzählen und die VDR-Version stehen lassen.