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
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 Tune(const DTVMultiplex &tuning);
39
40 protected:
41 void run(void) override; // MThread
42 bool UpdateFilters() override; // StreamHandler
43
44 private:
45 explicit SatIPStreamHandler(const QString & device, int inputid);
46 ~SatIPStreamHandler() override;
47
48 bool Open(void);
49 void Close(void);
50
51 // For implementing Get & Return
52 static QMap<QString, SatIPStreamHandler*> s_handlers;
53 static QMap<QString, uint> s_handlersRefCnt;
54 static QMutex s_handlersLock;
55
56 public:
57 int m_inputId {0};
58 int m_satipsrc {1};
59
60 private:
62 QString m_device;
63 uint m_frontend {UINT_MAX};
67 bool m_setupinvoked {false};
68 QRecursiveMutex m_tunelock;
69 QStringList m_oldpids;
70
71 public:
72 QUdpSocket *m_dsocket {nullptr}; // RTP data socket
73 QUdpSocket *m_csocket {nullptr}; // RTCP control socket
74 ushort m_dport {0}; // RTP data port Note: this is m_dsocket->localPort()
75 ushort m_cport {0}; // RTCP control port Note: this is m_csocket->localPort()
76
77 public:
78 SatIPRTSP *m_rtsp {nullptr};
81
82 public:
83 bool HasLock();
85 void SetSigmonValues(bool lock, int level);
86
87 private:
89 bool m_hasLock {false};
91
92 public:
93 static uint GetUDPReceiveBufferSize(QUdpSocket *socket);
94 static uint SetUDPReceiveBufferSize(QUdpSocket *socket, uint rcvbuffersize);
95};
96
97// --- SatIPDataReadHelper ---------------------------------------------------
98
99class SatIPDataReadHelper : public QObject
100{
101 Q_OBJECT
102
103 public:
104 explicit SatIPDataReadHelper(SatIPStreamHandler *handler);
105 ~SatIPDataReadHelper() override;
106
107 public slots:
108 void ReadPending(void);
109
110 private:
112 QUdpSocket *m_socket {nullptr};
113 int m_timer {0};
116 bool m_valid {false};
117};
118
119// --- SatIPControlReadHelper ------------------------------------------------
120
121class SatIPControlReadHelper : public QObject
122{
123 Q_OBJECT
124
125 public:
127 ~SatIPControlReadHelper() override;
128
129 public slots:
130 void ReadPending(void);
131
132 private:
134 QUdpSocket *m_socket {nullptr};
135};
136
137#endif // SATIPSTREAMHANDLER_H
Encapsulates data about MPEG stream and emits events for each table.
SatIPStreamHandler * m_streamHandler
SatIPControlReadHelper(SatIPStreamHandler *handler)
SatIPDataReadHelper(SatIPStreamHandler *handler)
SatIPStreamHandler * m_streamHandler
-*- Mode: c++ -*-
Definition: satiprtsp.h:26
static QMutex s_handlersLock
SatIPControlReadHelper * m_controlReadHelper
SatIPDataReadHelper * m_dataReadHelper
SatIPStreamHandler(const QString &device, int inputid)
void AddListener(MPEGStreamData *data, bool=false, bool=false, const QString &output_file=QString()) override
QRecursiveMutex m_tunelock
DTVTunerType m_tunerType
static uint GetUDPReceiveBufferSize(QUdpSocket *socket)
Get receive buffer size of UDP socket.
static SatIPStreamHandler * Get(const QString &devname, int inputid)
static QMap< QString, SatIPStreamHandler * > s_handlers
void run(void) override
Runs the Qt event loop unless we have a QRunnable, in which case we run the runnable run instead.
bool UpdateFilters() override
static QMap< QString, uint > s_handlersRefCnt
static uint SetUDPReceiveBufferSize(QUdpSocket *socket, uint rcvbuffersize)
Set receive buffer size of UDP socket.
void SetSigmonValues(bool lock, int level)
bool Tune(const DTVMultiplex &tuning)
static void Return(SatIPStreamHandler *&ref, int inputid)
virtual void AddListener(MPEGStreamData *data, bool allow_section_reader=false, bool needs_buffering=false, const QString &output_file=QString())
unsigned int uint
Definition: compat.h:60