MythTV  master
satipstreamhandler.h
Go to the documentation of this file.
1 // -*- Mode: c++ -*-
2 
3 #ifndef SATIPSTREAMHANDLER_H
4 #define SATIPSTREAMHANDLER_H
5 
6 // Qt headers
7 #include <QString>
8 #include <QStringList>
9 #include <QRecursiveMutex>
10 #include <QMap>
11 
12 // MythTV headers
13 #include "dtvconfparserhelpers.h"
14 #include "dtvmultiplex.h"
15 #include "mpeg/mpegstreamdata.h"
16 #include "satiprtsp.h"
17 #include "streamhandler.h"
18 
21 
23 {
24  friend class SatIPDataReadHelper;
25 
26  public:
27  static SatIPStreamHandler *Get(const QString &devname, int inputid);
28  static void Return(SatIPStreamHandler * & ref, int inputid);
29 
31  bool /*allow_section_reader*/ = false,
32  bool /*needs_drb*/ = false,
33  const QString& output_file = QString()) override // StreamHandler
34  {
35  StreamHandler::AddListener(data, false, false, output_file);
36  } // StreamHandler
37 
38  bool UpdateFilters() override; // StreamHandler
39  bool Tune(const DTVMultiplex &tuning);
40 
41  private:
42  explicit SatIPStreamHandler(const QString & device, int inputid);
43  ~SatIPStreamHandler() override;
44 
45  bool Open(void);
46  void Close(void);
47 
48  void run(void) override; // MThread
49 
50  // For implementing Get & Return
51  static QMap<QString, SatIPStreamHandler*> s_handlers;
52  static QMap<QString, uint> s_handlersRefCnt;
53  static QMutex s_handlersLock;
54 
55  public:
56  int m_inputId {0};
57  int m_satipsrc {1};
58 
59  private:
61  QString m_device;
62  uint m_frontend {UINT_MAX};
63  QUrl m_baseurl;
66  bool m_setupinvoked {false};
67  QRecursiveMutex m_tunelock;
68  QStringList m_oldpids;
69 
70  public:
71  QUdpSocket *m_dsocket {nullptr}; // RTP data socket
72  QUdpSocket *m_csocket {nullptr}; // RTCP control socket
73  ushort m_dport {0}; // RTP data port Note: this is m_dsocket->localPort()
74  ushort m_cport {0}; // RTCP control port Note: this is m_csocket->localPort()
75 
76  public:
77  SatIPRTSP *m_rtsp {nullptr};
80 
81  public:
82  bool HasLock();
83  int GetSignalStrength();
84  void SetSigmonValues(bool lock, int level);
85 
86  private:
87  QMutex m_sigmonLock;
88  bool m_hasLock {false};
90 
91  public:
92  static uint GetUDPReceiveBufferSize(QUdpSocket *socket);
93  static uint SetUDPReceiveBufferSize(QUdpSocket *socket, uint rcvbuffersize);
94 };
95 
96 // --- SatIPDataReadHelper ---------------------------------------------------
97 
98 class SatIPDataReadHelper : public QObject
99 {
100  Q_OBJECT
101 
102  public:
103  explicit SatIPDataReadHelper(SatIPStreamHandler *handler);
104  ~SatIPDataReadHelper() override;
105 
106  public slots:
107  void ReadPending(void);
108 
109  private:
111  QUdpSocket *m_socket {nullptr};
112  int m_timer {0};
115  bool m_valid {false};
116 };
117 
118 // --- SatIPControlReadHelper ------------------------------------------------
119 
120 class SatIPControlReadHelper : public QObject
121 {
122  Q_OBJECT
123 
124  public:
125  explicit SatIPControlReadHelper(SatIPStreamHandler *handler);
126  ~SatIPControlReadHelper() override;
127 
128  public slots:
129  void ReadPending(void);
130 
131  private:
133  QUdpSocket *m_socket {nullptr};
134 };
135 
136 #endif // SATIPSTREAMHANDLER_H
DTVMultiplex
Definition: dtvmultiplex.h:24
SatIPControlReadHelper::m_streamHandler
SatIPStreamHandler * m_streamHandler
Definition: satipstreamhandler.h:132
streamhandler.h
SatIPStreamHandler::m_dport
ushort m_dport
Definition: satipstreamhandler.h:73
StreamHandler
Definition: streamhandler.h:56
SatIPStreamHandler::m_sigmonLock
QMutex m_sigmonLock
Definition: satipstreamhandler.h:87
SatIPStreamHandler::m_tuningurl
QUrl m_tuningurl
Definition: satipstreamhandler.h:64
SatIPDataReadHelper::ReadPending
void ReadPending(void)
Definition: satipstreamhandler.cpp:551
SatIPStreamHandler::m_signalStrength
int m_signalStrength
Definition: satipstreamhandler.h:89
SatIPStreamHandler::m_dsocket
QUdpSocket * m_dsocket
Definition: satipstreamhandler.h:71
SatIPControlReadHelper::~SatIPControlReadHelper
~SatIPControlReadHelper() override
Definition: satipstreamhandler.cpp:654
SatIPStreamHandler::m_rtsp
SatIPRTSP * m_rtsp
Definition: satipstreamhandler.h:77
SatIPStreamHandler::m_oldtuningurl
QUrl m_oldtuningurl
Definition: satipstreamhandler.h:65
dtvmultiplex.h
SatIPStreamHandler::s_handlersRefCnt
static QMap< QString, uint > s_handlersRefCnt
Definition: satipstreamhandler.h:52
SatIPStreamHandler::HasLock
bool HasLock()
Definition: satipstreamhandler.cpp:492
DTVTunerType
Definition: dtvconfparserhelpers.h:76
SatIPStreamHandler::SetUDPReceiveBufferSize
static uint SetUDPReceiveBufferSize(QUdpSocket *socket, uint rcvbuffersize)
Set receive buffer size of UDP socket.
Definition: satipstreamhandler.cpp:742
SatIPControlReadHelper
Definition: satipstreamhandler.h:120
SatIPDataReadHelper::m_sequenceNumber
uint m_sequenceNumber
Definition: satipstreamhandler.h:113
SatIPStreamHandler::SetSigmonValues
void SetSigmonValues(bool lock, int level)
Definition: satipstreamhandler.cpp:504
SatIPStreamHandler::Return
static void Return(SatIPStreamHandler *&ref, int inputid)
Definition: satipstreamhandler.cpp:63
SatIPDataReadHelper::m_timer
int m_timer
Definition: satipstreamhandler.h:112
SatIPControlReadHelper::ReadPending
void ReadPending(void)
Definition: satipstreamhandler.cpp:662
SatIPStreamHandler::~SatIPStreamHandler
~SatIPStreamHandler() override
Definition: satipstreamhandler.cpp:234
SatIPStreamHandler::Open
bool Open(void)
Definition: satipstreamhandler.cpp:447
MPEGStreamData
Encapsulates data about MPEG stream and emits events for each table.
Definition: mpegstreamdata.h:85
SatIPStreamHandler::m_tunerType
DTVTunerType m_tunerType
Definition: satipstreamhandler.h:60
SatIPStreamHandler::GetSignalStrength
int GetSignalStrength()
Definition: satipstreamhandler.cpp:498
SatIPControlReadHelper::SatIPControlReadHelper
SatIPControlReadHelper(SatIPStreamHandler *handler)
Definition: satipstreamhandler.cpp:642
SatIPStreamHandler::SatIPStreamHandler
SatIPStreamHandler(const QString &device, int inputid)
Definition: satipstreamhandler.cpp:108
SatIPStreamHandler::m_hasLock
bool m_hasLock
Definition: satipstreamhandler.h:88
uint
unsigned int uint
Definition: compat.h:81
mpegstreamdata.h
SatIPStreamHandler::Close
void Close(void)
Definition: satipstreamhandler.cpp:485
SatIPStreamHandler::m_satipsrc
int m_satipsrc
Definition: satipstreamhandler.h:57
SatIPStreamHandler::AddListener
void AddListener(MPEGStreamData *data, bool=false, bool=false, const QString &output_file=QString()) override
Definition: satipstreamhandler.h:30
SatIPControlReadHelper::m_socket
QUdpSocket * m_socket
Definition: satipstreamhandler.h:133
SatIPStreamHandler::m_baseurl
QUrl m_baseurl
Definition: satipstreamhandler.h:63
SatIPDataReadHelper::m_count
uint m_count
Definition: satipstreamhandler.h:114
SatIPDataReadHelper::SatIPDataReadHelper
SatIPDataReadHelper(SatIPStreamHandler *handler)
Definition: satipstreamhandler.cpp:524
SatIPDataReadHelper::m_socket
QUdpSocket * m_socket
Definition: satipstreamhandler.h:111
SatIPStreamHandler::UpdateFilters
bool UpdateFilters() override
Definition: satipstreamhandler.cpp:242
SatIPStreamHandler::m_cport
ushort m_cport
Definition: satipstreamhandler.h:74
satiprtsp.h
SatIPStreamHandler::s_handlersLock
static QMutex s_handlersLock
Definition: satipstreamhandler.h:53
SatIPDataReadHelper::~SatIPDataReadHelper
~SatIPDataReadHelper() override
Definition: satipstreamhandler.cpp:544
SatIPStreamHandler::run
void run(void) override
Runs the Qt event loop unless we have a QRunnable, in which case we run the runnable run instead.
Definition: satipstreamhandler.cpp:287
SatIPDataReadHelper
Definition: satipstreamhandler.h:98
SatIPRTSP
-*- Mode: c++ -*-
Definition: satiprtsp.h:25
SatIPStreamHandler::m_dataReadHelper
SatIPDataReadHelper * m_dataReadHelper
Definition: satipstreamhandler.h:78
SatIPStreamHandler::Get
static SatIPStreamHandler * Get(const QString &devname, int inputid)
Definition: satipstreamhandler.cpp:32
SatIPStreamHandler::m_setupinvoked
bool m_setupinvoked
Definition: satipstreamhandler.h:66
StreamHandler::AddListener
virtual void AddListener(MPEGStreamData *data, bool allow_section_reader=false, bool needs_buffering=false, const QString &output_file=QString())
Definition: streamhandler.cpp:35
SatIPStreamHandler::GetUDPReceiveBufferSize
static uint GetUDPReceiveBufferSize(QUdpSocket *socket)
Get receive buffer size of UDP socket.
Definition: satipstreamhandler.cpp:727
SatIPStreamHandler::m_tunelock
QRecursiveMutex m_tunelock
Definition: satipstreamhandler.h:67
SatIPDataReadHelper::m_valid
bool m_valid
Definition: satipstreamhandler.h:115
SatIPStreamHandler::m_csocket
QUdpSocket * m_csocket
Definition: satipstreamhandler.h:72
SatIPStreamHandler::Tune
bool Tune(const DTVMultiplex &tuning)
Definition: satipstreamhandler.cpp:353
SatIPStreamHandler::s_handlers
static QMap< QString, SatIPStreamHandler * > s_handlers
Definition: satipstreamhandler.h:51
dtvconfparserhelpers.h
SatIPStreamHandler::m_device
QString m_device
Definition: satipstreamhandler.h:61
SatIPStreamHandler::m_inputId
int m_inputId
Definition: satipstreamhandler.h:56
SatIPStreamHandler
Definition: satipstreamhandler.h:22
SatIPDataReadHelper::m_streamHandler
SatIPStreamHandler * m_streamHandler
Definition: satipstreamhandler.h:110
SatIPStreamHandler::m_oldpids
QStringList m_oldpids
Definition: satipstreamhandler.h:68
SatIPStreamHandler::m_frontend
uint m_frontend
Definition: satipstreamhandler.h:62
SatIPStreamHandler::m_controlReadHelper
SatIPControlReadHelper * m_controlReadHelper
Definition: satipstreamhandler.h:79