mirror of
https://github.com/vdr-projects/vdr.git
synced 2025-03-01 10:50:46 +00:00
- Completely switched to the new CVS HEAD version of the linux-dvb driver. The NEWSTRUCT compile time switch is now obsolete. The required driver is now the CVS HEAD version dated 2002-11-01 or later. - Adjusted the INSTALL file to the 1.1.x version. - Only accepting key presses from the current remote control when learning (thanks to Oliver Endriss). - Fixed the EPG scanner, which broke 'Transfer Mode' as soon as it kicked in (thanks to Oliver Endriss for reporting this one). - Fixed handling audio tracks in cDvbDevice. - Updated channels.conf.terr (thanks to Uwe Scheffler). - Fixed displaying the group separators in the channel display (thanks to Martin Hammerschmid for pointing out this one). - The Makefile now includes the file Make.config (if present in the VDR source directory), which allows the user to overwrite several settings with individual values (suggested by Andreas Schultz). The VDR distribution archive does not contain this file in order to not overwrite a user defined file. There is a Make.config.template which contains the default values of the macros the user can overwrite. - Since there have been changes to the 'newplugin' script authors of plugins may want to newly create their plugins' Makefiles with the new version of this script, and adapt them to their individual needs (make sure you don't overwrite your existing plugin directory - make a backup copy first!). - Fixed reading EPG data via the SVDRP command PUTE (it changed the current service ID). - Fixed closing all dup'ed file descriptors in cPipe. - Implemented a plugin interface for additional audio processing (see PLUGINS.html under "Dolby Digital"). The functionality of the '-a' command line option has been reactivated. Since the author doesn't have any Dolby Digital equipment this may or may not work as expected. There may still be some places where a call to cAudios::Clear() or cAudios::Mute() is necessary. Those with Dolby Digital equipment should please take a look at this and maybe send patches. Replaying Dolby Digital in ways other than through VDR's '-a' option will have to be implemented as plugins. Those who have written patches for VDR version 1.0.x should convert their work into the proper plugins for version 1.1.x. Note to authors of cPlayer derived plugins: please read the modified comments in device.h regarding the member functions cDevice::Clear(), cDevice::Mute() and cDevice::PlayAudio(). Derived classes must call these base class member functions to make sure all registered cAudio objects are properly handled. Also note that the return type of cDevice::PlayAudio() has been changed to 'void', since this function always has to accept the entire data block immediately and there is nothing that could be reasonably done in case an error occurs in one of the cAudio objects. - Now checking the driver's DVB_API_VERSION in dvbdevice.h. Since VDR now requires a driver dated 2002-11-01 or later the MIN_DVB_DRIVER_VERSION_FOR_TIMESHIFT and DVB_DRIVER_VERSION stuff has been replaced with DO_REC_AND_PLAY_ON_PRIMARY_DEVICE, which can be used to disable simultaneous recording and replaying on the primary DVB device in case there are problems with this.
169 lines
6.1 KiB
C++
169 lines
6.1 KiB
C++
/***************************************************************************
|
|
eit.h - description
|
|
-------------------
|
|
begin : Fri Aug 25 2000
|
|
copyright : (C) 2000 by Robert Schneider
|
|
email : Robert.Schneider@web.de
|
|
|
|
2001-08-15: Adapted to 'libdtv' by Rolf Hakenes <hakenes@hippomi.de>
|
|
|
|
***************************************************************************/
|
|
|
|
/***************************************************************************
|
|
* *
|
|
* This program is free software; you can redistribute it and/or modify *
|
|
* it under the terms of the GNU General Public License as published by *
|
|
* the Free Software Foundation; either version 2 of the License, or *
|
|
* (at your option) any later version. *
|
|
* *
|
|
* $Id: eit.h 1.20 2002/11/02 12:36:36 kls Exp $
|
|
***************************************************************************/
|
|
|
|
#ifndef __EIT_H
|
|
#define __EIT_H
|
|
|
|
#include "thread.h"
|
|
#include "tools.h"
|
|
|
|
#define MAXEPGBUGFIXLEVEL 2
|
|
|
|
class cEventInfo : public cListObject {
|
|
friend class cSchedule;
|
|
friend class cEIT;
|
|
private:
|
|
unsigned char uTableID; // Table ID this event came from
|
|
unsigned short uServiceID; // Service ID of program for that event
|
|
bool bIsFollowing; // true if this is the next event on this channel
|
|
bool bIsPresent; // true if this is the present event running
|
|
char *pExtendedDescription; // Extended description of this event
|
|
char *pSubtitle; // Subtitle of event
|
|
char *pTitle; // Title of event
|
|
unsigned short uEventID; // Event ID of this event
|
|
long lDuration; // duration of event in seconds
|
|
time_t tTime; // Start time
|
|
int nChannelNumber; // the actual channel number from VDR's channel list (used in cMenuSchedule for sorting by channel number)
|
|
protected:
|
|
void SetTableID(unsigned char tableid);
|
|
void SetFollowing(bool foll);
|
|
void SetPresent(bool pres);
|
|
void SetTitle(const char *string);
|
|
void SetServiceID(unsigned short servid);
|
|
void SetEventID(unsigned short evid);
|
|
void SetDuration(long l);
|
|
void SetTime(time_t t);
|
|
void SetExtendedDescription(const char *string);
|
|
void SetSubtitle(const char *string);
|
|
cEventInfo(unsigned short serviceid, unsigned short eventid);
|
|
public:
|
|
~cEventInfo();
|
|
const unsigned char GetTableID(void) const;
|
|
const char *GetTimeString(void) const;
|
|
const char *GetEndTimeString(void) const;
|
|
const char *GetDate(void) const;
|
|
bool IsFollowing(void) const;
|
|
bool IsPresent(void) const;
|
|
const char *GetExtendedDescription(void) const;
|
|
const char *GetSubtitle(void) const;
|
|
const char *GetTitle(void) const;
|
|
unsigned short GetEventID(void) const;
|
|
long GetDuration(void) const;
|
|
time_t GetTime(void) const;
|
|
unsigned short GetServiceID(void) const;
|
|
int GetChannelNumber(void) const { return nChannelNumber; }
|
|
void SetChannelNumber(int ChannelNumber) const { ((cEventInfo *)this)->nChannelNumber = ChannelNumber; } // doesn't modify the EIT data, so it's ok to make it 'const'
|
|
void Dump(FILE *f, const char *Prefix = "") const;
|
|
static bool Read(FILE *f, cSchedule *Schedule);
|
|
void FixEpgBugs(void);
|
|
};
|
|
|
|
class cSchedule : public cListObject {
|
|
friend class cSchedules;
|
|
friend class cEIT;
|
|
private:
|
|
cEventInfo *pPresent;
|
|
cEventInfo *pFollowing;
|
|
unsigned short uServiceID;
|
|
cList<cEventInfo> Events;
|
|
protected:
|
|
void SetServiceID(unsigned short servid);
|
|
bool SetFollowingEvent(cEventInfo *pEvent);
|
|
bool SetPresentEvent(cEventInfo *pEvent);
|
|
void Cleanup(time_t tTime);
|
|
void Cleanup(void);
|
|
cSchedule(unsigned short servid = 0);
|
|
public:
|
|
~cSchedule();
|
|
cEventInfo *AddEvent(cEventInfo *EventInfo);
|
|
const cEventInfo *GetPresentEvent(void) const;
|
|
const cEventInfo *GetFollowingEvent(void) const;
|
|
unsigned short GetServiceID(void) const;
|
|
const cEventInfo *GetEvent(unsigned short uEventID, time_t tTime = 0) const;
|
|
const cEventInfo *GetEventAround(time_t tTime) const;
|
|
const cEventInfo *GetEventNumber(int n) const { return Events.Get(n); }
|
|
int NumEvents(void) const { return Events.Count(); }
|
|
void Dump(FILE *f, const char *Prefix = "") const;
|
|
static bool Read(FILE *f, cSchedules *Schedules);
|
|
};
|
|
|
|
class cSchedules : public cList<cSchedule> {
|
|
friend class cSchedule;
|
|
friend class cSIProcessor;
|
|
private:
|
|
const cSchedule *pCurrentSchedule;
|
|
unsigned short uCurrentServiceID;
|
|
protected:
|
|
const cSchedule *AddServiceID(unsigned short servid);
|
|
const cSchedule *SetCurrentServiceID(unsigned short servid);
|
|
void Cleanup();
|
|
public:
|
|
cSchedules(void);
|
|
~cSchedules();
|
|
const cSchedule *GetSchedule(unsigned short servid) const;
|
|
const cSchedule *GetSchedule(void) const;
|
|
void Dump(FILE *f, const char *Prefix = "") const;
|
|
static bool Read(FILE *f);
|
|
};
|
|
|
|
typedef struct sip_filter {
|
|
|
|
u_char pid;
|
|
u_char tid;
|
|
int handle;
|
|
bool inuse;
|
|
|
|
}SIP_FILTER;
|
|
|
|
class cSIProcessor : public cThread {
|
|
private:
|
|
static int numSIProcessors;
|
|
static cSchedules *schedules;
|
|
static cMutex schedulesMutex;
|
|
static const char *epgDataFileName;
|
|
static time_t lastDump;
|
|
bool masterSIProcessor;
|
|
int currentTransponder;
|
|
SIP_FILTER *filters;
|
|
char *fileName;
|
|
bool active;
|
|
void Action(void);
|
|
bool AddFilter(u_char pid, u_char tid);
|
|
bool ShutDownFilters(void);
|
|
public:
|
|
cSIProcessor(const char *FileName);
|
|
~cSIProcessor();
|
|
static void SetEpgDataFileName(const char *FileName);
|
|
static const char *GetEpgDataFileName(void);
|
|
static const cSchedules *Schedules(cMutexLock &MutexLock);
|
|
// Caller must provide a cMutexLock which has to survive the entire
|
|
// time the returned cSchedules is accessed. Once the cSchedules is no
|
|
// longer used, the cMutexLock must be destroyed.
|
|
static bool Read(FILE *f = NULL);
|
|
static void Clear(void);
|
|
void SetStatus(bool On);
|
|
void SetCurrentTransponder(int CurrentTransponder);
|
|
static bool SetCurrentServiceID(unsigned short servid);
|
|
static void TriggerDump(void);
|
|
};
|
|
|
|
#endif
|