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 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};
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();
84 void SetSigmonValues(bool lock, int level);
85
86 private:
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
98class 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
120class SatIPControlReadHelper : public QObject
121{
122 Q_OBJECT
123
124 public:
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
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: freesurround.h:24