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 #if QT_VERSION < QT_VERSION_CHECK(5,14,0)
10 #include <QMutex>
11 #else
12 #include <QRecursiveMutex>
13 #endif
14 #include <QMap>
15 
16 // MythTV headers
17 #include "dtvconfparserhelpers.h"
18 #include "dtvmultiplex.h"
19 #include "mpeg/mpegstreamdata.h"
20 #include "satiprtsp.h"
21 #include "streamhandler.h"
22 
25 
27 {
28  friend class SatIPDataReadHelper;
29 
30  public:
31  static SatIPStreamHandler *Get(const QString &devname, int inputid);
32  static void Return(SatIPStreamHandler * & ref, int inputid);
33 
35  bool /*allow_section_reader*/ = false,
36  bool /*needs_drb*/ = false,
37  const QString& output_file = QString()) override // StreamHandler
38  {
39  StreamHandler::AddListener(data, false, false, output_file);
40  } // StreamHandler
41 
42  bool UpdateFilters() override; // StreamHandler
43  bool Tune(const DTVMultiplex &tuning);
44 
45  private:
46  explicit SatIPStreamHandler(const QString & device, int inputid);
47  ~SatIPStreamHandler() override;
48 
49  bool Open(void);
50  void Close(void);
51 
52  void run(void) override; // MThread
53 
54  // For implementing Get & Return
55  static QMap<QString, SatIPStreamHandler*> s_handlers;
56  static QMap<QString, uint> s_handlersRefCnt;
57  static QMutex s_handlersLock;
58 
59  public:
60  int m_inputId {0};
61  int m_satipsrc {1};
62 
63  private:
65  QString m_device;
66  uint m_frontend {UINT_MAX};
67  QUrl m_baseurl;
70  bool m_setupinvoked {false};
71 #if QT_VERSION < QT_VERSION_CHECK(5,14,0)
72  QMutex m_tunelock {QMutex::Recursive};
73 #else
74  QRecursiveMutex m_tunelock;
75 #endif
76  QStringList m_oldpids;
77 
78  public:
79  QUdpSocket *m_dsocket {nullptr}; // RTP data socket
80  QUdpSocket *m_csocket {nullptr}; // RTCP control socket
81  ushort m_dport {0}; // RTP data port Note: this is m_dsocket->localPort()
82  ushort m_cport {0}; // RTCP control port Note: this is m_csocket->localPort()
83 
84  public:
85  SatIPRTSP *m_rtsp {nullptr};
88 
89  public:
90  bool HasLock();
91  int GetSignalStrength();
92  void SetSigmonValues(bool lock, int level);
93 
94  private:
95  QMutex m_sigmonLock;
96  bool m_hasLock {false};
98 
99  public:
100  static uint GetUDPReceiveBufferSize(QUdpSocket *socket);
101  static uint SetUDPReceiveBufferSize(QUdpSocket *socket, uint rcvbuffersize);
102 };
103 
104 // --- SatIPDataReadHelper ---------------------------------------------------
105 
106 class SatIPDataReadHelper : public QObject
107 {
108  Q_OBJECT
109 
110  public:
111  explicit SatIPDataReadHelper(SatIPStreamHandler *handler);
112  ~SatIPDataReadHelper() override;
113 
114  public slots:
115  void ReadPending(void);
116 
117  private:
119  QUdpSocket *m_socket {nullptr};
120  int m_timer {0};
123  bool m_valid {false};
124 };
125 
126 // --- SatIPControlReadHelper ------------------------------------------------
127 
128 class SatIPControlReadHelper : public QObject
129 {
130  Q_OBJECT
131 
132  public:
133  explicit SatIPControlReadHelper(SatIPStreamHandler *handler);
134  ~SatIPControlReadHelper() override;
135 
136  public slots:
137  void ReadPending(void);
138 
139  private:
141  QUdpSocket *m_socket {nullptr};
142 };
143 
144 #endif // SATIPSTREAMHANDLER_H
DTVMultiplex
Definition: dtvmultiplex.h:24
SatIPControlReadHelper::m_streamHandler
SatIPStreamHandler * m_streamHandler
Definition: satipstreamhandler.h:140
streamhandler.h
SatIPStreamHandler::m_dport
ushort m_dport
Definition: satipstreamhandler.h:81
StreamHandler
Definition: streamhandler.h:58
SatIPStreamHandler::m_sigmonLock
QMutex m_sigmonLock
Definition: satipstreamhandler.h:95
SatIPStreamHandler::m_tuningurl
QUrl m_tuningurl
Definition: satipstreamhandler.h:68
SatIPDataReadHelper::ReadPending
void ReadPending(void)
Definition: satipstreamhandler.cpp:551
SatIPStreamHandler::m_signalStrength
int m_signalStrength
Definition: satipstreamhandler.h:97
SatIPStreamHandler::m_dsocket
QUdpSocket * m_dsocket
Definition: satipstreamhandler.h:79
SatIPControlReadHelper::~SatIPControlReadHelper
~SatIPControlReadHelper() override
Definition: satipstreamhandler.cpp:654
SatIPStreamHandler::m_rtsp
SatIPRTSP * m_rtsp
Definition: satipstreamhandler.h:85
SatIPStreamHandler::m_oldtuningurl
QUrl m_oldtuningurl
Definition: satipstreamhandler.h:69
dtvmultiplex.h
SatIPStreamHandler::s_handlersRefCnt
static QMap< QString, uint > s_handlersRefCnt
Definition: satipstreamhandler.h:56
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:128
SatIPDataReadHelper::m_sequenceNumber
uint m_sequenceNumber
Definition: satipstreamhandler.h:121
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:120
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:64
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:96
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:61
SatIPStreamHandler::AddListener
void AddListener(MPEGStreamData *data, bool=false, bool=false, const QString &output_file=QString()) override
Definition: satipstreamhandler.h:34
SatIPControlReadHelper::m_socket
QUdpSocket * m_socket
Definition: satipstreamhandler.h:141
SatIPStreamHandler::m_baseurl
QUrl m_baseurl
Definition: satipstreamhandler.h:67
SatIPDataReadHelper::m_count
uint m_count
Definition: satipstreamhandler.h:122
SatIPDataReadHelper::SatIPDataReadHelper
SatIPDataReadHelper(SatIPStreamHandler *handler)
Definition: satipstreamhandler.cpp:524
SatIPDataReadHelper::m_socket
QUdpSocket * m_socket
Definition: satipstreamhandler.h:119
SatIPStreamHandler::UpdateFilters
bool UpdateFilters() override
Definition: satipstreamhandler.cpp:242
SatIPStreamHandler::m_cport
ushort m_cport
Definition: satipstreamhandler.h:82
satiprtsp.h
SatIPStreamHandler::s_handlersLock
static QMutex s_handlersLock
Definition: satipstreamhandler.h:57
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:106
SatIPRTSP
-*- Mode: c++ -*-
Definition: satiprtsp.h:25
SatIPStreamHandler::m_dataReadHelper
SatIPDataReadHelper * m_dataReadHelper
Definition: satipstreamhandler.h:86
SatIPStreamHandler::Get
static SatIPStreamHandler * Get(const QString &devname, int inputid)
Definition: satipstreamhandler.cpp:32
SatIPStreamHandler::m_setupinvoked
bool m_setupinvoked
Definition: satipstreamhandler.h:70
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:74
SatIPDataReadHelper::m_valid
bool m_valid
Definition: satipstreamhandler.h:123
SatIPStreamHandler::m_csocket
QUdpSocket * m_csocket
Definition: satipstreamhandler.h:80
SatIPStreamHandler::Tune
bool Tune(const DTVMultiplex &tuning)
Definition: satipstreamhandler.cpp:353
SatIPStreamHandler::s_handlers
static QMap< QString, SatIPStreamHandler * > s_handlers
Definition: satipstreamhandler.h:55
dtvconfparserhelpers.h
SatIPStreamHandler::m_device
QString m_device
Definition: satipstreamhandler.h:65
SatIPStreamHandler::m_inputId
int m_inputId
Definition: satipstreamhandler.h:60
SatIPStreamHandler
Definition: satipstreamhandler.h:26
SatIPDataReadHelper::m_streamHandler
SatIPStreamHandler * m_streamHandler
Definition: satipstreamhandler.h:118
SatIPStreamHandler::m_oldpids
QStringList m_oldpids
Definition: satipstreamhandler.h:76
SatIPStreamHandler::m_frontend
uint m_frontend
Definition: satipstreamhandler.h:66
SatIPStreamHandler::m_controlReadHelper
SatIPControlReadHelper * m_controlReadHelper
Definition: satipstreamhandler.h:87