MythTV  master
Public Member Functions | Static Public Member Functions | Private Member Functions | Private Attributes | Static Private Attributes | List of all members
DVBStreamHandler Class Reference

#include <dvbstreamhandler.h>

Inheritance diagram for DVBStreamHandler:
Inheritance graph
[legend]
Collaboration diagram for DVBStreamHandler:
Collaboration graph
[legend]

Public Member Functions

void RetuneMonitor (void)
 
bool IsRetuneAllowed (void) const
 
void SetRetuneAllowed (bool allow, DTVSignalMonitor *sigmon, DVBChannel *dvbchan)
 
- Public Member Functions inherited from StreamHandler
virtual void AddListener (MPEGStreamData *data, bool allow_section_reader=false, bool needs_buffering=false, QString output_file=QString())
 
virtual void RemoveListener (MPEGStreamData *data)
 
bool IsRunning (void) const
 
bool HasError (void) const
 
virtual bool AddNamedOutputFile (const QString &filename)
 Called with _listener_lock locked just after adding new output file. More...
 
virtual void RemoveNamedOutputFile (const QString &filename)
 Called with _listener_lock locked just before removing old output file. More...
 

Static Public Member Functions

static DVBStreamHandlerGet (const QString &devname, int inputid)
 
static void Return (DVBStreamHandler *&ref, int inputid)
 

Private Member Functions

 DVBStreamHandler (const QString &, int inputid)
 
void run (void) override
 Runs the Qt event loop unless we have a QRunnable, in which case we run the runnable run instead. More...
 
void RunTS (void)
 Uses TS filtering devices to read a DVB device for tables & data. More...
 
void RunSR (void)
 Uses "Section" reader to read a DVB device for tables. More...
 
void CycleFiltersByPriority (void) override
 
bool SupportsTSMonitoring (void)
 Returns true if TS monitoring is supported. More...
 
PIDInfoCreatePIDInfo (uint pid, uint stream_type, int pes_type) override
 

Private Attributes

QString _dvr_dev_path
 
volatile bool _allow_retune
 
DTVSignalMonitor_sigmon
 
DVBChannel_dvbchannel
 
DeviceReadBuffer_drb
 

Static Private Attributes

static QMutex s_rec_supports_ts_monitoring_lock
 
static QMap< QString, bools_rec_supports_ts_monitoring
 
static QMutex s_handlers_lock
 
static QMap< QString, DVBStreamHandler * > s_handlers
 
static QMap< QString, uints_handlers_refcnt
 

Additional Inherited Members

- Protected Types inherited from StreamHandler
typedef QMap< MPEGStreamData *, QString > StreamDataList
 
- Protected Member Functions inherited from StreamHandler
 StreamHandler (const QString &device, int inputid)
 
 ~StreamHandler ()
 
void Start (void)
 
void Stop (void)
 
void SetRunning (bool running, bool using_buffering, bool using_section_reader)
 
bool AddPIDFilter (PIDInfo *info)
 
bool RemovePIDFilter (uint pid)
 
bool RemoveAllPIDFilters (void)
 
void UpdateListeningForEIT (void)
 
bool UpdateFiltersFromStreamData (void)
 
virtual bool UpdateFilters (void)
 
PIDPriority GetPIDPriority (uint pid) const
 
void ReaderPaused (int fd) override
 
void PriorityEvent (int fd) override
 
void WriteMPTS (unsigned char *buffer, uint len)
 Write out a copy of the raw MPTS. More...
 
virtual void SetRunningDesired (bool desired)
 At minimum this sets _running_desired, this may also send signals to anything that might be blocking the run() loop. More...
 
- Protected Member Functions inherited from MThread
int exec (void)
 Enters the qt event loop. call exit or quit to exit thread. More...
 
 MThread (const QString &objectName)
 Standard constructor. More...
 
 MThread (const QString &objectName, QRunnable *runnable)
 Use this constructor if you want the default run() method to run the QRunnable's run() method instead of entering the Qt event loop. More...
 
virtual ~MThread ()
 
void RunProlog (void)
 Sets up a thread, call this if you reimplement run(). More...
 
void RunEpilog (void)
 Cleans up a thread's resources, call this if you reimplement run(). More...
 
QThread * qthread (void)
 Returns the thread, this will always return the same pointer no matter how often you restart the thread. More...
 
void setObjectName (const QString &name)
 
QString objectName (void) const
 
void setPriority (QThread::Priority priority)
 
QThread::Priority priority (void) const
 
bool isFinished (void) const
 
bool isRunning (void) const
 
void setStackSize (uint stackSize)
 
uint stackSize (void) const
 
void exit (int retcode=0)
 Use this to exit from the thread if you are using a Qt event loop. More...
 
void start (QThread::Priority=QThread::InheritPriority)
 Tell MThread to start running the thread in the near future. More...
 
void terminate (void)
 Kill a thread unsafely. More...
 
void quit (void)
 calls exit(0) More...
 
bool wait (unsigned long time=ULONG_MAX)
 Wait for the MThread to exit, with a maximum timeout. More...
 
- Protected Member Functions inherited from DeviceReaderCB
virtual ~DeviceReaderCB ()=default
 
- Static Protected Member Functions inherited from MThread
static void setTerminationEnabled (bool enabled=true)
 
static void sleep (unsigned long time)
 
static void msleep (unsigned long time)
 
static void usleep (unsigned long time)
 
static void ThreadSetup (const QString &)
 This is to be called on startup in those few threads that haven't been ported to MThread. More...
 
static void ThreadCleanup (void)
 This is to be called on exit in those few threads that haven't been ported to MThread. More...
 
static void Cleanup (void)
 This will print out all the running threads, call exit(1) on each and then wait up to 5 seconds total for all the threads to exit. More...
 
static void GetAllThreadNames (QStringList &list)
 
static void GetAllRunningThreadNames (QStringList &list)
 
- Protected Attributes inherited from StreamHandler
QString m_device
 
int m_inputid
 
bool m_needs_buffering {false}
 
bool m_allow_section_reader {false}
 
QMutex m_add_rm_lock
 
QMutex m_start_stop_lock
 
volatile bool m_running_desired {false}
 
volatile bool m_bError {false}
 
bool m_running {false}
 
bool m_restarting {false}
 
bool m_using_buffering {false}
 
bool m_using_section_reader {false}
 
QWaitCondition m_running_state_changed
 
QMutex m_pid_lock {QMutex::Recursive}
 
vector< uintm_eit_pids
 
PIDInfoMap m_pid_info
 
uint m_open_pid_filters {0}
 
MythTimer m_cycle_timer
 
ThreadedFileWriterm_mpts_tfw {nullptr}
 
QSet< QString > m_mpts_files
 
QString m_mpts_base_file
 
QMutex m_mpts_lock
 
QMutex m_listener_lock {QMutex::Recursive}
 
StreamDataList m_stream_data_list
 
- Protected Attributes inherited from MThread
MThreadInternalm_thread {nullptr}
 
QRunnable * m_runnable {nullptr}
 
bool m_prolog_executed {true}
 
bool m_epilog_executed {true}
 
- Static Protected Attributes inherited from MThread
static const int kDefaultStartTimeout
 

Detailed Description

Definition at line 33 of file dvbstreamhandler.h.

Constructor & Destructor Documentation

◆ DVBStreamHandler()

DVBStreamHandler::DVBStreamHandler ( const QString &  dvb_device,
int  inputid 
)
explicitprivate

Definition at line 100 of file dvbstreamhandler.cpp.

Referenced by Get().

Member Function Documentation

◆ Get()

DVBStreamHandler * DVBStreamHandler::Get ( const QString &  devname,
int  inputid 
)
static

Definition at line 33 of file dvbstreamhandler.cpp.

Referenced by DVBSignalMonitor::DVBSignalMonitor(), and DVBRecorder::Open().

◆ Return()

void DVBStreamHandler::Return ( DVBStreamHandler *&  ref,
int  inputid 
)
static

Definition at line 63 of file dvbstreamhandler.cpp.

Referenced by DVBRecorder::Close(), and DVBSignalMonitor::~DVBSignalMonitor().

◆ RetuneMonitor()

void DVBStreamHandler::RetuneMonitor ( void  )

Definition at line 512 of file dvbstreamhandler.cpp.

Referenced by RunSR(), RunTS(), and DVBSignalMonitor::UpdateValues().

◆ IsRetuneAllowed()

bool DVBStreamHandler::IsRetuneAllowed ( void  ) const
inline

Definition at line 43 of file dvbstreamhandler.h.

Referenced by DVBSignalMonitor::UpdateValues().

◆ SetRetuneAllowed()

void DVBStreamHandler::SetRetuneAllowed ( bool  allow,
DTVSignalMonitor sigmon,
DVBChannel dvbchan 
)

Definition at line 493 of file dvbstreamhandler.cpp.

Referenced by DVBSignalMonitor::Stop(), and DVBSignalMonitor::UpdateValues().

◆ run()

void DVBStreamHandler::run ( void  )
overrideprivatevirtual

Runs the Qt event loop unless we have a QRunnable, in which case we run the runnable run instead.

Note
If you override this method you must call RunProlog before you do any work and RunEpilog before you exit the run method.

Reimplemented from MThread.

Definition at line 111 of file dvbstreamhandler.cpp.

◆ RunTS()

void DVBStreamHandler::RunTS ( void  )
private

Uses TS filtering devices to read a DVB device for tables & data.

This supports all types of MPEG based stream data, but is extremely slow with DVB over USB 1.0 devices which for efficiency reasons buffer a stream until a full block transfer buffer full of the requested tables is available. This takes a very long time when you are just waiting for a PAT or PMT table, and the buffer is hundreds of packets in size.

Definition at line 135 of file dvbstreamhandler.cpp.

Referenced by run().

◆ RunSR()

void DVBStreamHandler::RunSR ( void  )
private

Uses "Section" reader to read a DVB device for tables.

This currently only supports DVB streams, ATSC and the raw MPEG streams used by some cable and satelite providers is not supported.

Definition at line 300 of file dvbstreamhandler.cpp.

Referenced by run().

◆ CycleFiltersByPriority()

void DVBStreamHandler::CycleFiltersByPriority ( void  )
overrideprivatevirtual

Reimplemented from StreamHandler.

Definition at line 383 of file dvbstreamhandler.cpp.

◆ SupportsTSMonitoring()

bool DVBStreamHandler::SupportsTSMonitoring ( void  )
private

Returns true if TS monitoring is supported.

NOTE: If you are using a DEC2000-t device you need to apply the patches provided by Peter Beutner for it, see http://www.gossamer-threads.com/lists/mythtv/dev/166172 These patches should make it in to Linux 2.6.15 or 2.6.16.

Definition at line 553 of file dvbstreamhandler.cpp.

Referenced by run().

◆ CreatePIDInfo()

PIDInfo* DVBStreamHandler::CreatePIDInfo ( uint  pid,
uint  stream_type,
int  pes_type 
)
inlineoverrideprivatevirtual

Reimplemented from StreamHandler.

Definition at line 60 of file dvbstreamhandler.h.

Member Data Documentation

◆ _dvr_dev_path

QString DVBStreamHandler::_dvr_dev_path
private

Definition at line 64 of file dvbstreamhandler.h.

Referenced by RunTS(), and SupportsTSMonitoring().

◆ _allow_retune

volatile bool DVBStreamHandler::_allow_retune
private

Definition at line 65 of file dvbstreamhandler.h.

Referenced by RetuneMonitor(), and SetRetuneAllowed().

◆ _sigmon

DTVSignalMonitor* DVBStreamHandler::_sigmon
private

Definition at line 67 of file dvbstreamhandler.h.

Referenced by RetuneMonitor(), and SetRetuneAllowed().

◆ _dvbchannel

DVBChannel* DVBStreamHandler::_dvbchannel
private

Definition at line 68 of file dvbstreamhandler.h.

Referenced by RetuneMonitor(), and SetRetuneAllowed().

◆ _drb

DeviceReadBuffer* DVBStreamHandler::_drb
private

Definition at line 69 of file dvbstreamhandler.h.

Referenced by RunTS().

◆ s_rec_supports_ts_monitoring_lock

QMutex DVBStreamHandler::s_rec_supports_ts_monitoring_lock
staticprivate

Definition at line 72 of file dvbstreamhandler.h.

Referenced by SupportsTSMonitoring().

◆ s_rec_supports_ts_monitoring

QMap< QString, bool > DVBStreamHandler::s_rec_supports_ts_monitoring
staticprivate

Definition at line 73 of file dvbstreamhandler.h.

Referenced by SupportsTSMonitoring().

◆ s_handlers_lock

QMutex DVBStreamHandler::s_handlers_lock
staticprivate

Definition at line 76 of file dvbstreamhandler.h.

Referenced by Get(), and Return().

◆ s_handlers

QMap< QString, DVBStreamHandler * > DVBStreamHandler::s_handlers
staticprivate

Definition at line 77 of file dvbstreamhandler.h.

Referenced by Get(), and Return().

◆ s_handlers_refcnt

QMap< QString, uint > DVBStreamHandler::s_handlers_refcnt
staticprivate

Definition at line 78 of file dvbstreamhandler.h.

Referenced by Get(), and Return().


The documentation for this class was generated from the following files: