12 Commits

Author SHA1 Message Date
Klaus Schmidinger
da948a50d2 Version 1.3.38
- 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
  Peña):
  + 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
  Schlüßler).
- 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
  details).
- 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
  Fischer).
- 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
  Schneider).
- Cleaned up some trailing white space.
2006-01-08 18:00:00 +01:00
Klaus Schmidinger
ad40eaa28e Version 1.3.31
- Added missing German OSD texts for 'Audio language'.
- The Setup/CICAM menu now only contains the devices that actually have a CI and
  dynamically detects the number of slots a CI provides.
- Implemented cAudioRepacker for better handling of audio PES packets (thanks to
  Reinhard Nissl).
- Modified handling of audio packets for radio channels in remux.c (thanks to
  Reinhard Nissl).
- Updated the Danish OSD texts (thanks to Mogens Elneff).
- Fixed the EPG scan, so that it doesn't use the primary device if that is
  currently in Transfer-Mode from itself (thanks to Marcus Hilbrich for a bug
  report that lead to this).
- Removed the TUNER_LOCK_TIMEOUT in cDevice::AttachReceiver() since it caused more
  trouble than it fixed.
- Fixed detecting short channel names for "Kabel Deutschland", who uses a comma
  as delimiter (thanks to Marco Schlüßler).
- Moved cMenuEditTimer and cMenuEvent to menu.h so that plugins can use it (suggested
  by Thomas Günther).
- The new static function cString::sprintf() can be used to easily create a formatted
  string.
- Plugins can now implement their own SVDRP commands (based on a patch from Hardy
  Flor). See PLUGINS.html, section "SVDRP commands" for details. The SVDRP commands
  of a plugin are accessed through the new SVDRP command PLUG.
  See PLUGINS/src/svdrpdemo for an example of how to use this feature.
- The new SVDRP command PLAY can be used to start replaying a recording (thanks to
  Hardy Flor).
- The new SVDRP command EDIT can be used to start the editing process of a recording
  (based on the CUTR patch by Harald Milz).
2005-08-28 18:00:00 +02:00
Klaus Schmidinger
dab203efe9 Version 1.3.30
- Improved responsiveness inside CAM menus.
- Added handling of the 'Close MMI' tag to avoid error log messages with CAMs
  that actually use it.
- Now waiting at startup until all DVB devices are ready. This includes having
  all CAMs initialized and ready to decrypt, so that no more "channel not
  available" happens if VDR is started with the current channel being an encrypted
  one, or a timer on such a channel hits right after starting VDR.
- Fixed cVideoRepacker to better handle errors in data (thanks to Reinhard Nissl).
- Fixed cDvbTuner to avoid lockups on NPTL systems (thanks to Marcel Wiesweg).
- Added 'Service' functions to the plugin interface (thanks to Udo Richter).
  See PLUGINS.html, section "Custom services" for details.
- Replaced the get/put_unaligned() macros from <asm/unaligned.h> with own inline
  functions to avoid problems on platforms that don't provide these (thanks to
  David Woodhouse for his help).
2005-08-21 18:00:00 +02:00
Klaus Schmidinger
4d477cd144 Version 1.3.20
- Fixed displaying the "Audio" menu with the "Green" button from the "Main" menu
  in case there is only one audio track (thanks to Sascha Volkenandt for reporting
  this one).
- Now setting primaryDevice = NULL before deleting the devices in cDevice::Shutdown()
  to avoid problems in case other threads access it (thanks to Wolfgang Rohdewald for
  pointing this out).
- Fixed a buffer overflow in case a station defines all 32 audio PIDs (thanks to
  Christian Jacobsen for reporting this one).
- Fixed masking SubStreamType in cDevice::PlayPesPacket() (thanks to Werner Fink
  for pointing out this one).
- The new function cPlugin::Stop() shall be used to stop any background activities
  of a plugin. Previously this was done in the plugin's destructor, but it is
  better to do this in a dedicated function that can be called early when shutting
  down.
- Moved the call to SetAudioChannel(0) into cDevice::ClrAvailableTracks() to have it
  executed also when starting a replay.
- Completed the Danish OSD texts (thanks to Mogens Elneff).
- Completed the French OSD texts (thanks to Olivier Jacques).
- The new setup option "OSD/Channel info time" can be used to define the time after
  which the channel display is removed if no key has been pressed (thanks to
  Olivier Jacques).
- Modified cDolbyRepacker to make sure PES packets don't exceed the requested length
  (thanks to Reinhard Nissl).
- Fixed several memory leaks that were introduced through the use of cString (thanks
  to Stefan Huelswitt for reporting these).
- Added CMD_SPU_CHG_COLCON to cDvbSpuDecoder::setTime() (thanks to Marco Schlüßler).
- Making sure the current audio track is actually one of the ones available in a
  recording (thanks to Sascha Volkenandt for reporting a problem when starting
  replay of a recording that has no Dolby Digital audio after switching to a channel
  that has DD and selecting the DD audio track).
- Removed 'flags' from tTrackId (thought we would need this, but apparently we don't).
- Making sure the "Mute" and "Volume+/-" keys don't interfere with digital audio.
- Fixed the "pre 1.3.19" compatibility mode for old Dolby Digital recordings (thanks
  to Werner Fink for pointing out that this can be triggered in the default branch).
- Calling pesAssembler->Reset() in cDevice::AttachPlayer() to avoid problems with
  residual data in replay and Transfer Mode (thanks to Werner Fink for pointing this
  out).
- Added MPEG1 replay capability to cPesAssembler (thanks to Stefan Huelswitt).
2005-02-06 18:00:00 +01:00
Klaus Schmidinger
fb5cccb2df Version 1.3.18
- 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
  files.
- 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:
  cChannel::ToText()
  tChannelID::ToString()
  cEvent::GetDateString()
  cEvent::GetTimeString()
  cEvent::GetEndTimeString()
  cEvent::GetVpsString()
  cMark::ToText()
  cTimer::ToText()
  cSource::ToString()
  cTimer::PrintDay()
  cTimer::PrintFirstDay()
  PrefixVideoFileName()
  IndexToHMSF()
  ChannelString()
  strescape()
  AddDirectory()
  itoa()
  WeekDayName()
  DayDateTime()
  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
  Gleichmann).
- 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
  Schlüßler).
- 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.
2005-01-09 18:00:00 +01:00
Klaus Schmidinger
3c349510b5 Version 1.3.8
- Fixed a crash when switching the skin and having selected a non-default theme
  that is not available for the newly selected skin (thanks to Sascha Volkenandt
  for reporting this one).
- Fixed some issues with gcc 3.4 (thanks to Prakash K. Cheemplavam and Marcel
  Wiesweg).
- Added a hint to PLUGINS.html about how to name a plugin that implements a skin.
- Completed the Finnish OSD texts (thanks to Rolf Ahrenberg).
- Single shot timers and events now show the day of week (adopted with some changes
  from the "elchi" patch, orginally introduced by Oskar Signell). Plugins that use
  cEvent::GetDateString() should note that this function now returns a longer
  string, including the day of week. The new function const char *WeekDayName(time_t t)
  can be called with a time_t value to get the day of week for that time.
- When processing XPM data, the color name "None" is now mapped to #00000000, which
  is "fully transparent" (suggested by Sascha Volkenandt).
- Fixed the OSD alignment in the SPU decoder (thanks to Miko Wohlgemuth for reporting
  this one and helping to test the fix).
- Fixed freezing picture when a recording starts on a system that always uses
  'Transfer Mode' (thanks to Michal Dobrzynski for reporting this one).
- Fixed a memory leak in NIT processing (thanks to Marcel Wiesweg).
- Added a few missing initializations (thanks to Marcel Wiesweg).
- Moved the declaration of cMenuText to VDR/menu.h to make it available to plugins.
  It now also has a SetText() function that can be used to dynamically set the text
  in an already existing cMenuText (both suggested by Stefan Huelswitt).
- Added play mode pmVideoOnly (thanks to Marcel Wiesweg).
- Added a missing cStatus::MsgOsdClear() to cDisplayChannel::~cDisplayChannel()
  (thanks to Oliver Endriss).
- No longer displaying unused color buttons in the "Classic VDR" skin (thanks to
  Oliver Endriss for reporting this one).
- Added some missing cStatus::MsgOsdTextItem() calls (thanks to Oliver Endriss for
  reporting this one).
2004-05-23 18:00:00 +02:00
Klaus Schmidinger
e4b016980b Version 1.2.5pre1
- Now explicitly handling exit value 0 and 2 in 'runvdr'.
- Added a missing 'w' to the allowed characters for Finnish and Swedish (thanks
  to Lauri Tischler and Ragnar Sundblad).
- Added channels for DVB-T Hannover (Germany) to channels.cont.terr (thanks to
  Peter Waechtler).
- Fixed a hangup in SVDRP when the client disappears without sending QUIT (thanks
  to Robert Bartl for reporting this one). The problem was introduced in version
  1.2.2 through the fix for an occasional "Broken pipe" error in SVDRP connections.
- Updated 'channels.conf.terr' for Berlin.
- Fixed displaying still pictures, now using the driver's VIDEO_STILLPICTURE call
  directly (thanks to Oliver Endriss). This also improves navigating through DVD
  menus with the DVD plugin. If this causes problems with your particular system
  (maybe because you are using the 'analogtv' plugin) you can reactivate the
  previous behaviour by commenting out the line
  #define VIDEO_STILLPICTURE_WORKS_WITH_VDR_FRAMES
  in VDR/dvbdevice.c.
  Note that you need driver version 2003-08-23 or later for this to work!
- Fixed handling extra blanks in plugin command lines.
- Actually implemented the SVDRP command DELC.
- Now clearing the player device if there are too many poll timeouts in 'Transfer
  Mode', which avoids buffer overflows and black screens in such cases.
2003-08-31 18:00:00 +02:00
Klaus Schmidinger
c84022554a Version 1.1.31
- Introduced the new function cPlugin::Initialize(), in order to be able to separate
  the startup of a plugin into an "early" (Initialize()) and "late" (Start()) phase
  (suggested by Andreas Schultz). Plugin authors should please read the section
  about "Getting started" in PLUGINS.html and adapt their code if applicable.
- Implemented the CableDeliverySystemDescriptor and TerrestrialDeliverySystemDescriptor
  in libdtv (thanks to Sven Grothklags and Andreas Schultz).
- Fixed keeping live video active in case the primary device doesn't have an MPEG
  decoder (thanks to Wolfgang Goeller for reporting this one).
- Implemented cDevice::ActualDevice(), which returns the actual receiving device in
  case of 'Transfer Mode', or the primary device otherwise. This may be useful for
  plugins that want to attach a cReceiver to the device where the current live video
  is actually coming from.
- Added VDRVERSNUM to config.h, which can be used by the preprocessor to check the
  actual VDR version (suggested by Stefan Huelswitt).
- Removed the WaitForPut/WaitForGet stuff from cRingBuffer, since it appears to
  no longer be necessary due to the implementation of cNonBlockingFileReader in
  dvbplayer.c. Also, the long timeout in WaitForPut caused problems with cReceivers
  that use a ring buffer and didn't immediately return from their Receive() function
  if the buffer runs full (thanks to Sascha Volkenandt for reporting this one).
- Fixed handling EPG data where the "extended event descriptor" comes before the
  "short event" or a "time shifted event" (thanks to Jonan Santiago).
- Disabled the "Received stuffing section in EIT" log message.
- Updated 'channels.conf.terr' for Berlin (thanks to Juri Haberland).
- Avoiding short display of the "Main" menu when pressing the "Recordings" button
  or the "Back" button during replay.
- Further increased the timeout until an index file is considerd no longer to be
  written.
- Implemented separate PausePriority and PauseLifetime parameters for the recordings
  created when pausing live video (suggested by Alfred Zastrow).
- Changed C++ style comments in libdtv into C style to avoid warnings in gcc 3.x
  (thanks to Andreas Schultz).
2003-05-11 18:00:00 +02:00
Klaus Schmidinger
fe9499ba90 Version 1.1.17
- Added new entries to 'ca.conf'.
- Fixed closing unused PID handles (thanks to Stefan Schluenss for reporting this
  one).
- Added more examples to 'diseqc.conf' (thanks to Oliver Endriss).
- Fixed disabling multiple recordings on a single DVB card (comment out the definition
  of the macros DO_REC_AND_PLAY_ON_PRIMARY_DEVICE and DO_MULTIPLE_RECORDINGS in
  dvbdevice.c).
- Plugins can now have their very own OSD setup in the object they return from
  a call to cPlugin::MainMenuAction(). In order to implement this, the return type
  of cPlugin::MainMenuAction() had to be changed from (cOsdMenu *) to (cOsdObject *).
  So in case you are compiling an existing plugin with this version of VDR and you
  get an error message, simply change cOsdMenu to cOsdObject in the plugin's source
  for the MainMenuAction() function.
  Plugin authors who have so far (ab)used the cControl mechanism to implement their
  own raw OSD should take a look at the new demo plugin 'osddemo'. It implements
  a very primitive game that shows how a plugin can have its own raw OSD. Especially
  look into cLineGame and see how it implements the Show() function. See also
  the chapter on "User interaction" in PLUGINS.html.
- Added three new fields to the lines in 'channels.conf': NID, TID and RID. NID and
  TID are the Network and Transport Stream IDs, respectively. RID is an additional ID
  that can be used to tell apart channels that would otherwise be indistinguishable.
  This is typically the case with radio channels, which may have the same NID, TID
  and SID, but different "radio IDs". This new field is therefore called RID ("radio
  ID"). Currently NID and TID are not yet used by VDR and should always be 0. The
  RID is actually used when building the "unique channel ID", so if you have channels
  in your 'channels.conf' file that cause error messages when loading, you can set
  the RIDs of these channels to different values.
  When reading an old 'channels.conf' these new fields will be automatically
  initialized to 0 and once the file is written back to disk they will be appended
  to the channel definitions.
  Thanks to Régis Bossut for pointing out that with some providers the channels can
  only be distinguished through the RID.
- The "unique channel ID" now contains an optional 5th part (the RID). See man vdr(5).
- Updated 'channels.conf.cable' and made some channels unique using the new RID
  (thanks to Andreas Kool for pointing out the problems).
- Made some channels unique in 'channels.conf.terr' using the new RID.
- Extended the '-l' option to allow logging to LOG_LOCALn (n=0..7) by writing, for
  instance, '-l 3.7' (suggested by Jürgen Schmidt).
- Now deleting stale lock files if they have a time stamp that is outside the window
  'now +/- LOCKFILESTALETIME'. This improves things in cases where the system time
  makes far jumps, so that a lock file might end up with a time stamp that lies
  in the distant future (thanks to Oliver Endriss).
2002-11-24 18:00:00 +01:00
Klaus Schmidinger
ed643353b1 Version 1.1.7
- Adapted VDR to the NEWSTRUCT driver. To use the new driver, compile VDR with
  'make NEWSTRUCT=1' (thanks to Holger Wächtler for some valuable advice).
  By default it currently still uses the old driver.
- Added some missing #includes (thanks to Martin Hammerschmid).
- Changed the log error message "can't record MPEG1!" to "error in data stream!",
  since the mentioning of MPEG1 has irritated many people.
- Consistently using malloc/free and new/delete (thanks to Andreas Schultz).
- Temporarily made cDevice::ProvidesCa() virtual (Andreas Schultz needs this
  in his DXR3 plugin).
- cDevice no longer exposes a file handle to cPlayer. A derived cPlayer class
  can now call DevicePoll() to see whether the replay device is ready for
  further data. A derived cDevice class must implement Poll() and shall
  check if any of its file handles is ready for data.
- Implemented several replay modes to allow players that play only audio (thanks
  to Stefan Huelswitt).
- Improved cCondVar::Wait() and implemented cCondVar::TimedWait() (thanks to
  Stefan Huelswitt).
- VDR no longer gives up if there is no DVB device. It continues to work if
  there is at least one device, either a DVB device found by the core VDR code
  itself, or a device implemented by a plugin.
2002-08-16 18:00:00 +02:00
Klaus Schmidinger
d07e3829f7 Version 1.1.2
- Changed the cPlugin::Start() function to return a boolean value that indicates
  if the plugin will not be able to perform its task (suggested by Stefan Huelswitt).
- Added the cPlugin::Housekeeping() function (suggested by Stefan Huelswitt).
- Updated channels.conf.cable (thanks to Uwe Scheffler).
- Added 'insert' capabilities to cList (suggested by Stefan Huelswitt).
- Changed the 'package' target in the plugin's Makefile to produce a package that
  expands to a directory with just the plugin name and version number (suggested
  by Stefan Huelswitt).
- Made the config directory available to plugins (suggested by Stefan Huelswitt).
  See PLUGINS.html, section "Configuration files" for details.
- Improved the [eid]syslog() macros, so that the LOG_... macros don't need to be
  given any more.
2002-05-13 18:00:00 +02:00
Klaus Schmidinger
ae8a947367 Version 1.1.0
- Begin of the 1.1 development branch. THIS IS NOT A STABLE VERSION!
  The current stable version for every day use is still the 1.0 branch.
- First step towards a universal plugin interface. See the file PLUGINS.html
  for a detailed description. The man page vdr(1) describes the new options '-L'
  and '-P' used to load plugins. This first step implements the complete "outer"
  shell for plugins. The "inner" access to VDR data structures will follow.
- The VDR version number is now displayed in the title line of the "Setup" menu.
2002-05-09 18:00:00 +02:00