vdr/status.h
Klaus Schmidinger 67e322b0dd Version 2.1.4
VDR developer version 2.1.4 is now available at

       ftp://ftp.tvdr.de/vdr/Developer/vdr-2.1.4.tar.bz2

A 'diff' against the previous version is available at

       ftp://ftp.tvdr.de/vdr/Developer/vdr-2.1.3-2.1.4.diff

MD5 checksums:

e1018c13dc257c986e0e30494913b415  vdr-2.1.4.tar.bz2
870f6f03f4697d136c886358c3be4277  vdr-2.1.3-2.1.4.diff

WARNING:
========

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.

From the HISTORY file:
- Updated 'sources.conf' (thanks to Antti Hartikainen).
- cFont::CreateFont() now returns a dummy font in case there are no fonts installed.
  This prevents a crash with the LCARS skin on a system that has no fonts.
- Improved locking for CAM slots and made the pure functions of cCiAdapter have
  default implementations, to fix a possible crash with CI adapters and CAM slots
  that are implemented in a plugin.
- Added logging the supported system ids of a CAM.
- Increased MIN_TS_PACKETS_FOR_FRAME_DETECTOR to 10 in order to be able to record
  channels that need more than 5 TS packets for detecting frame borders (reported by
  Eike Sauer).
- Fixed deleting the source recording after moving it to a different volume (reported
  by Christoph Haubrich).
- Now waiting explicitly until all CAM slots are ready before switching to the
  initial channel when VDR is started. This is necessary in case CI adapters are
  used that are not physically connected to a dedicated device. The respective checks
  in cDvbDevice have been removed to avoid redundancy.
- Fixed detecting frame borders in MPEG-2 streams that have "bottom fields" or varying
  GOP structures (reported by Christian Paulick, with help from Helmut Auer).
- Now unassigning CAMs from their devices when they are no longer used.
- Now making sure the primary device goes into transfer mode for live viewing if the
  CAM wants to receive the TS data.
- Fixed a wrong alignment in cCiDateTime::SendDateTime().
- Since the new cRecordingsHandler that was introduced in version 2.1.2 not only
  handles "cutting", but also "moving" and "copying" recordings, the German word
  "Schnitt" has been replaced with the more generic "Bearbeitung", which covers all
  three variations of "editing" a recording (suggested by Christoph Haubrich).
  Maintainers of translations for other languages may want to change their *.po files
  accordingly.
- The new function cStatus::ChannelChange() can be implemented by plugins to be
  informed about changes to the parameters of a channel that may require a retune.
  This may, for instance, be useful for plugins that implement live streaming, so that
  they can react on changes to a channel's PIDs or CA descriptors (problem reported
  by Mariusz Bialonczyk).
- Fixed a superfluous call to the skin's SetRecording() function after renaming a
  recording (reported by Christoph Haubrich).
2014-01-26 23:55:34 +01:00

112 lines
6.6 KiB
C++

/*
* status.h: Status monitoring
*
* See the main source file 'vdr.c' for copyright information and
* how to reach the author.
*
* $Id: status.h 3.1 2014/01/25 10:47:39 kls Exp $
*/
#ifndef __STATUS_H
#define __STATUS_H
#include "config.h"
#include "device.h"
#include "player.h"
#include "tools.h"
enum eTimerChange { tcMod, tcAdd, tcDel };
class cTimer;
class cStatus : public cListObject {
private:
static cList<cStatus> statusMonitors;
protected:
// These functions can be implemented by derived classes to receive status information:
virtual void ChannelChange(const cChannel *Channel) {}
// Indicates a change in the parameters of the given Channel that may
// require a retune.
virtual void TimerChange(const cTimer *Timer, eTimerChange Change) {}
// Indicates a change in the timer settings.
// If Change is tcAdd or tcDel, Timer points to the timer that has
// been added or will be deleted, respectively. In case of tcMod,
// Timer is NULL; this indicates that some timer has been changed.
// Note that tcAdd and tcDel are always also followed by a tcMod.
virtual void ChannelSwitch(const cDevice *Device, int ChannelNumber, bool LiveView) {}
// Indicates a channel switch on the given DVB device.
// If ChannelNumber is 0, this is before the channel is being switched,
// otherwise ChannelNumber is the number of the channel that has been switched to.
// LiveView tells whether this channel switch is for live viewing.
virtual void Recording(const cDevice *Device, const char *Name, const char *FileName, bool On) {}
// The given DVB device has started (On = true) or stopped (On = false) recording Name.
// Name is the name of the recording, without any directory path. The full file name
// of the recording is given in FileName, which may be NULL in case there is no
// actual file involved. If On is false, Name may be NULL.
virtual void Replaying(const cControl *Control, const char *Name, const char *FileName, bool On) {}
// The given player control has started (On = true) or stopped (On = false) replaying Name.
// Name is the name of the recording, without any directory path. In case of a player that can't provide
// a name, Name can be a string that identifies the player type (like, e.g., "DVD").
// The full file name of the recording is given in FileName, which may be NULL in case there is no
// actual file involved. If On is false, Name may be NULL.
virtual void SetVolume(int Volume, bool Absolute) {}
// The volume has been set to the given value, either
// absolutely or relative to the current volume.
virtual void SetAudioTrack(int Index, const char * const *Tracks) {}
// The audio track has been set to the one given by Index, which
// points into the Tracks array of strings. Tracks is NULL terminated.
virtual void SetAudioChannel(int AudioChannel) {}
// The audio channel has been set to the given value.
// 0=stereo, 1=left, 2=right, -1=no information available.
virtual void SetSubtitleTrack(int Index, const char * const *Tracks) {}
// The subtitle track has been set to the one given by Index, which
// points into the Tracks array of strings. Tracks is NULL terminated.
virtual void OsdClear(void) {}
// The OSD has been cleared.
virtual void OsdTitle(const char *Title) {}
// Title has been displayed in the title line of the menu.
virtual void OsdStatusMessage(const char *Message) {}
// Message has been displayed in the status line of the menu.
// If Message is NULL, the status line has been cleared.
virtual void OsdHelpKeys(const char *Red, const char *Green, const char *Yellow, const char *Blue) {}
// The help keys have been set to the given values (may be NULL).
virtual void OsdItem(const char *Text, int Index) {}
// The OSD displays the given single line Text as menu item at Index.
virtual void OsdCurrentItem(const char *Text) {}
// The OSD displays the given single line Text as the current menu item.
virtual void OsdTextItem(const char *Text, bool Scroll) {}
// The OSD displays the given multi line text. If Text points to an
// actual string, that text shall be displayed and Scroll has no
// meaning. If Text is NULL, Scroll defines whether the previously
// received text shall be scrolled up (true) or down (false) and
// the text shall be redisplayed with the new offset.
virtual void OsdChannel(const char *Text) {}
// The OSD displays the single line Text with the current channel information.
virtual void OsdProgramme(time_t PresentTime, const char *PresentTitle, const char *PresentSubtitle, time_t FollowingTime, const char *FollowingTitle, const char *FollowingSubtitle) {}
// The OSD displays the given programme information.
public:
cStatus(void);
virtual ~cStatus();
// These functions are called whenever the related status information changes:
static void MsgChannelChange(const cChannel *Channel);
static void MsgTimerChange(const cTimer *Timer, eTimerChange Change);
static void MsgChannelSwitch(const cDevice *Device, int ChannelNumber, bool LiveView);
static void MsgRecording(const cDevice *Device, const char *Name, const char *FileName, bool On);
static void MsgReplaying(const cControl *Control, const char *Name, const char *FileName, bool On);
static void MsgSetVolume(int Volume, bool Absolute);
static void MsgSetAudioTrack(int Index, const char * const *Tracks);
static void MsgSetAudioChannel(int AudioChannel);
static void MsgSetSubtitleTrack(int Index, const char * const *Tracks);
static void MsgOsdClear(void);
static void MsgOsdTitle(const char *Title);
static void MsgOsdStatusMessage(const char *Message);
static void MsgOsdHelpKeys(const char *Red, const char *Green, const char *Yellow, const char *Blue);
static void MsgOsdItem(const char *Text, int Index);
static void MsgOsdCurrentItem(const char *Text);
static void MsgOsdTextItem(const char *Text, bool Scroll = false);
static void MsgOsdChannel(const char *Text);
static void MsgOsdProgramme(time_t PresentTime, const char *PresentTitle, const char *PresentSubtitle, time_t FollowingTime, const char *FollowingTitle, const char *FollowingSubtitle);
};
#endif //__STATUS_H