vdr-plugin-iptv/device.h

104 lines
2.7 KiB
C
Raw Permalink Normal View History

2007-09-12 19:28:59 +02:00
/*
* device.h: IPTV plugin for the Video Disk Recorder
*
* See the README file for copyright information and how to reach the author.
*
*/
#ifndef __IPTV_DEVICE_H
#define __IPTV_DEVICE_H
#include <vdr/device.h>
#include "common.h"
2007-09-14 17:44:25 +02:00
#include "protocoludp.h"
2007-09-16 11:38:00 +02:00
#include "protocolhttp.h"
2007-09-16 14:18:15 +02:00
#include "protocolfile.h"
2007-10-15 23:03:45 +02:00
#include "protocolext.h"
2007-09-12 19:28:59 +02:00
#include "streamer.h"
#include "sectionfilter.h"
#include "pidscanner.h"
2007-10-01 20:14:57 +02:00
#include "sidscanner.h"
2007-10-05 21:00:44 +02:00
#include "statistics.h"
2007-10-10 00:12:17 +02:00
class cIptvDevice : public cDevice, public cIptvPidStatistics, public cIptvBufferStatistics {
2007-09-12 19:28:59 +02:00
// static ones
public:
static unsigned int deviceCount;
static bool Initialize(unsigned int DeviceCount);
static unsigned int Count(void);
static cIptvDevice *GetIptvDevice(int CardIndex);
2007-09-12 19:28:59 +02:00
// private parts
private:
2007-09-19 20:17:30 +02:00
enum {
2007-09-24 19:20:58 +02:00
eMaxSecFilterCount = 32
2007-09-19 20:17:30 +02:00
};
2007-09-12 19:28:59 +02:00
unsigned int deviceIndex;
int dvrFd;
2007-09-12 19:28:59 +02:00
bool isPacketDelivered;
bool isOpenDvr;
bool sidScanEnabled;
bool pidScanEnabled;
2007-09-12 19:28:59 +02:00
cRingBufferLinear *tsBuffer;
int tsBufferPrefill;
2007-09-14 17:44:25 +02:00
cIptvProtocolUdp *pUdpProtocol;
2007-09-16 11:38:00 +02:00
cIptvProtocolHttp *pHttpProtocol;
2007-09-16 14:18:15 +02:00
cIptvProtocolFile *pFileProtocol;
2007-10-15 23:03:45 +02:00
cIptvProtocolExt *pExtProtocol;
2007-09-12 19:28:59 +02:00
cIptvStreamer *pIptvStreamer;
cPidScanner *pPidScanner;
2007-10-01 20:14:57 +02:00
cSidScanner *pSidScanner;
2007-09-12 19:28:59 +02:00
cMutex mutex;
2007-09-24 19:20:58 +02:00
cIptvSectionFilter* secfilters[eMaxSecFilterCount];
2007-09-12 19:28:59 +02:00
// constructor & destructor
public:
cIptvDevice(unsigned int DeviceIndex);
virtual ~cIptvDevice();
cString GetInformation(unsigned int Page = IPTV_DEVICE_INFO_ALL);
2008-01-05 00:36:37 +01:00
// copy and assignment constructors
private:
2008-01-05 00:36:37 +01:00
cIptvDevice(const cIptvDevice&);
cIptvDevice& operator=(const cIptvDevice&);
// for statistics and general information
cString GetGeneralInformation(void);
cString GetPidsInformation(void);
cString GetFiltersInformation(void);
2007-09-12 19:28:59 +02:00
2007-09-21 23:50:52 +02:00
// for channel parsing & buffering
2007-09-12 19:28:59 +02:00
private:
2007-09-21 23:50:52 +02:00
void ResetBuffering(void);
bool IsBuffering(void);
bool DeleteFilter(unsigned int Index);
2009-03-20 23:56:37 +01:00
bool IsBlackListed(u_short Pid, u_char Tid, u_char Mask) const;
2007-09-12 19:28:59 +02:00
// for channel selection
public:
virtual bool ProvidesSource(int Source) const;
virtual bool ProvidesTransponder(const cChannel *Channel) const;
virtual bool ProvidesChannel(const cChannel *Channel, int Priority = -1, bool *NeedsDetachReceivers = NULL) const;
2008-01-28 22:36:32 +01:00
virtual int NumProvidedSystems(void) const;
2007-09-12 19:28:59 +02:00
protected:
virtual bool SetChannelDevice(const cChannel *Channel, bool LiveView);
// for recording
protected:
virtual bool SetPid(cPidHandle *Handle, int Type, bool On);
virtual bool OpenDvr(void);
virtual void CloseDvr(void);
virtual bool GetTSPacket(uchar *&Data);
// for section filtering
public:
virtual int OpenFilter(u_short Pid, u_char Tid, u_char Mask);
2007-10-14 20:45:34 +02:00
virtual void CloseFilter(int Handle);
// for transponder lock
public:
virtual bool HasLock(int);
2007-09-12 19:28:59 +02:00
};
#endif // __IPTV_DEVICE_H