1
0
mirror of https://github.com/rofafor/vdr-plugin-satip.git synced 2023-10-10 13:37:42 +02:00
vdr-plugin-satip/tuner.h

126 lines
3.0 KiB
C
Raw Normal View History

2014-03-08 12:07:47 +01:00
/*
* tuner.h: SAT>IP plugin for the Video Disk Recorder
*
* See the README file for copyright information and how to reach the author.
*
*/
#ifndef __SATIP_TUNER_H
#define __SATIP_TUNER_H
#include <vdr/thread.h>
#include <vdr/tools.h>
#include "deviceif.h"
#include "rtp.h"
#include "rtcp.h"
2014-11-09 11:51:52 +01:00
#include "rtsp.h"
#include "server.h"
2014-03-08 12:07:47 +01:00
#include "statistics.h"
2014-11-09 01:32:50 +01:00
class cSatipPid : public cVector<int> {
private:
int PidIndex(const int &pidP)
{
for (int i = 0; i < this->Size(); ++i) {
if (pidP == this->At(i))
return i;
}
return -1;
}
public:
void RemovePid(const int &pidP)
{
int i = PidIndex(pidP);
if (i >= 0)
this->Remove(i);
}
void AddPid(int pidP)
{
if (PidIndex(pidP) < 0)
this->Append(pidP);
}
};
class cSatipTuner : public cThread, public cSatipTunerStatistics, public cSatipTunerIf
{
2014-03-08 12:07:47 +01:00
private:
enum {
eDummyPid = 100,
eDefaultSignalStrength = 15,
eDefaultSignalQuality = 224,
2014-11-16 20:42:24 +01:00
eApplicationMaxSizeB = 1500,
2014-11-22 16:04:32 +01:00
eSleepTimeoutMs = 500, // in milliseconds
eStatusUpdateTimeoutMs = 1000, // in milliseconds
ePidUpdateIntervalMs = 250, // in milliseconds
eConnectTimeoutMs = 5000, // in milliseconds
2014-04-02 20:06:37 +02:00
eMinKeepAliveIntervalMs = 30000 // in milliseconds
2014-03-08 12:07:47 +01:00
};
enum eTunerState { tsIdle, tsRelease, tsSet, tsTuned, tsLocked };
2014-03-08 12:07:47 +01:00
cCondWait sleepM;
cSatipDeviceIf* deviceM;
2014-11-09 11:51:52 +01:00
int deviceIdM;
2014-11-16 15:39:20 +01:00
cSatipRtsp rtspM;
cSatipRtp rtpM;
cSatipRtcp rtcpM;
2014-03-08 12:07:47 +01:00
cString streamAddrM;
cString streamParamM;
cSatipServer *currentServerM;
cSatipServer *nextServerM;
2014-03-08 12:07:47 +01:00
cMutex mutexM;
2014-11-16 14:38:23 +01:00
cTimeMs reConnectM;
2014-03-08 12:07:47 +01:00
cTimeMs keepAliveM;
cTimeMs statusUpdateM;
2014-03-08 12:07:47 +01:00
cTimeMs pidUpdateCacheM;
cString sessionM;
eTunerState currentStateM;
eTunerState nextStateM;
2014-03-08 12:07:47 +01:00
int timeoutM;
bool hasLockM;
int signalStrengthM;
int signalQualityM;
int streamIdM;
2014-11-09 01:32:50 +01:00
cSatipPid addPidsM;
cSatipPid delPidsM;
cSatipPid pidsM;
2014-03-08 12:07:47 +01:00
bool Connect(void);
bool Disconnect(void);
bool KeepAlive(bool forceP = false);
bool ReadReceptionStatus(bool forceP = false);
2014-04-19 16:27:47 +02:00
bool UpdatePids(bool forceP = false);
2014-11-19 20:01:45 +01:00
bool StateRequested(void);
bool RequestState(eTunerState stateP);
const char *TunerStateString(eTunerState stateP);
2014-03-08 12:07:47 +01:00
protected:
virtual void Action(void);
public:
cSatipTuner(cSatipDeviceIf &deviceP, unsigned int packetLenP);
virtual ~cSatipTuner();
bool IsTuned(void) const { return currentStateM > tsIdle; }
bool SetSource(cSatipServer *serverP, const char *parameterP, const int indexP);
2014-03-08 12:07:47 +01:00
bool SetPid(int pidP, int typeP, bool onP);
bool Open(void);
bool Close(void);
int SignalStrength(void);
int SignalQuality(void);
bool HasLock(void);
cString GetSignalStatus(void);
cString GetInformation(void);
2014-11-09 11:51:52 +01:00
// for internal tuner interface
public:
2014-11-16 14:38:23 +01:00
virtual void ProcessVideoData(u_char *bufferP, int lengthP);
virtual void ProcessApplicationData(u_char *bufferP, int lengthP);
2014-11-09 11:51:52 +01:00
virtual void SetStreamId(int streamIdP);
virtual void SetSessionTimeout(const char *sessionP, int timeoutP);
virtual int GetId(void);
2014-03-08 12:07:47 +01:00
};
#endif // __SATIP_TUNER_H