Buffers reads from device files. More...
#include <DeviceReadBuffer.h>
Public Member Functions | |
| DeviceReadBuffer (DeviceReaderCB *callback, bool use_poll=true, bool error_exit_on_poll_timeout=true) | |
| ~DeviceReadBuffer () | |
| bool | Setup (const QString &streamName, int streamfd, uint readQuanta=sizeof(TSPacket), uint deviceBufferSize=0) |
| void | Start (void) |
| void | Reset (const QString &streamName, int streamfd) |
| void | Stop (void) |
| void | SetRequestPause (bool request) |
| bool | IsPaused (void) const |
| bool | WaitForUnpause (unsigned long timeout) |
| bool | WaitForPaused (unsigned long timeout) |
| bool | IsErrored (void) const |
| bool | IsEOF (void) const |
| bool | IsRunning (void) const |
| uint | Read (unsigned char *buf, uint count) |
| Try to Read count bytes from into buffer. | |
Private Member Functions | |
| virtual void | run (void) |
| Runs the Qt event loop unless we have a QRunnable, in which case we run the runnable run instead. | |
| void | SetPaused (bool) |
| void | IncrWritePointer (uint len) |
| void | IncrReadPointer (uint len) |
| bool | HandlePausing (void) |
| bool | Poll (void) const |
| void | WakePoll (void) const |
| uint | WaitForUnused (uint bytes_needed) const |
| uint | WaitForUsed (uint bytes_needed, uint max_wait) const |
| bool | IsPauseRequested (void) const |
| bool | IsOpen (void) const |
| void | ClosePipes (void) const |
| uint | GetUnused (void) const |
| uint | GetUsed (void) const |
| uint | GetContiguousUnused (void) const |
| bool | CheckForErrors (ssize_t read_len, size_t requested_len, uint &err_cnt) |
| void | ReportStats (void) |
Private Attributes | |
| QString | videodevice |
| int | _stream_fd |
| int | wake_pipe [2] |
| long | wake_pipe_flags [2] |
| DeviceReaderCB * | readerCB |
| QMutex | lock |
| volatile bool | dorun |
| bool | eof |
| bool | error |
| bool | request_pause |
| bool | paused |
| bool | using_poll |
| bool | poll_timeout_is_error |
| uint | max_poll_wait |
| size_t | size |
| size_t | used |
| size_t | read_quanta |
| size_t | dev_read_size |
| size_t | min_read |
| unsigned char * | buffer |
| unsigned char * | readPtr |
| unsigned char * | writePtr |
| unsigned char * | endPtr |
| QWaitCondition | dataWait |
| QWaitCondition | runWait |
| QWaitCondition | pauseWait |
| QWaitCondition | unpauseWait |
| size_t | max_used |
| size_t | avg_used |
| size_t | avg_cnt |
| MythTimer | lastReport |
Buffers reads from device files.
This allows us to read the device regularly even in the presence of long blocking conditions on writing to disk or accessing the database.
Definition at line 33 of file DeviceReadBuffer.h.
| DeviceReadBuffer::DeviceReadBuffer | ( | DeviceReaderCB * | callback, | |
| bool | use_poll = true, |
|||
| bool | error_exit_on_poll_timeout = true | |||
| ) |
Definition at line 21 of file DeviceReadBuffer.cpp.
| DeviceReadBuffer::~DeviceReadBuffer | ( | ) |
Definition at line 63 of file DeviceReadBuffer.cpp.
| bool DeviceReadBuffer::Setup | ( | const QString & | streamName, | |
| int | streamfd, | |||
| uint | readQuanta = sizeof(TSPacket), |
|||
| uint | deviceBufferSize = 0 | |||
| ) |
Definition at line 73 of file DeviceReadBuffer.cpp.
Referenced by MpegRecorder::OpenV4L2DeviceAsInput(), ASIStreamHandler::run(), and DVBStreamHandler::RunTS().
| void DeviceReadBuffer::Start | ( | void | ) |
Definition at line 126 of file DeviceReadBuffer.cpp.
Referenced by ASIStreamHandler::run(), DVBStreamHandler::RunTS(), and MpegRecorder::StartEncoding().
| void DeviceReadBuffer::Reset | ( | const QString & | streamName, | |
| int | streamfd | |||
| ) |
Definition at line 154 of file DeviceReadBuffer.cpp.
Referenced by HandlePausing(), and MpegRecorder::StartEncoding().
| void DeviceReadBuffer::Stop | ( | void | ) |
Definition at line 169 of file DeviceReadBuffer.cpp.
Referenced by MpegRecorder::OpenV4L2DeviceAsInput(), ASIStreamHandler::run(), DVBStreamHandler::RunTS(), DVBStreamHandler::SetRunningDesired(), ASIStreamHandler::SetRunningDesired(), MpegRecorder::StopEncoding(), and ~DeviceReadBuffer().
| void DeviceReadBuffer::SetRequestPause | ( | bool | request | ) |
Definition at line 183 of file DeviceReadBuffer.cpp.
| bool DeviceReadBuffer::IsPaused | ( | void | ) | const |
Definition at line 231 of file DeviceReadBuffer.cpp.
Referenced by HandlePausing().
| bool DeviceReadBuffer::WaitForUnpause | ( | unsigned long | timeout | ) |
Definition at line 247 of file DeviceReadBuffer.cpp.
| bool DeviceReadBuffer::WaitForPaused | ( | unsigned long | timeout | ) |
Definition at line 237 of file DeviceReadBuffer.cpp.
| bool DeviceReadBuffer::IsErrored | ( | void | ) | const |
Definition at line 263 of file DeviceReadBuffer.cpp.
Referenced by MpegRecorder::run(), ASIStreamHandler::run(), and DVBStreamHandler::RunTS().
| bool DeviceReadBuffer::IsEOF | ( | void | ) | const |
Definition at line 269 of file DeviceReadBuffer.cpp.
Referenced by MpegRecorder::run(), ASIStreamHandler::run(), and DVBStreamHandler::RunTS().
| bool DeviceReadBuffer::IsRunning | ( | void | ) | const |
Definition at line 275 of file DeviceReadBuffer.cpp.
Referenced by MpegRecorder::OpenV4L2DeviceAsInput(), ASIStreamHandler::run(), DVBStreamHandler::RunTS(), and MpegRecorder::StopEncoding().
Try to Read count bytes from into buffer.
| buf | Buffer to put data in | |
| count | Number of bytes to attempt to read |
Definition at line 613 of file DeviceReadBuffer.cpp.
Referenced by MpegRecorder::run(), ASIStreamHandler::run(), and DVBStreamHandler::RunTS().
| void DeviceReadBuffer::run | ( | void | ) | [private, virtual] |
Runs the Qt event loop unless we have a QRunnable, in which case we run the runnable run instead.
Reimplemented from MThread.
Definition at line 320 of file DeviceReadBuffer.cpp.
| void DeviceReadBuffer::SetPaused | ( | bool | val | ) | [private] |
Definition at line 190 of file DeviceReadBuffer.cpp.
Referenced by HandlePausing().
| void DeviceReadBuffer::IncrWritePointer | ( | uint | len | ) | [private] |
Definition at line 299 of file DeviceReadBuffer.cpp.
Referenced by run().
| void DeviceReadBuffer::IncrReadPointer | ( | uint | len | ) | [private] |
Definition at line 312 of file DeviceReadBuffer.cpp.
Referenced by Read().
| bool DeviceReadBuffer::HandlePausing | ( | void | ) | [private] |
Definition at line 392 of file DeviceReadBuffer.cpp.
Referenced by run().
| bool DeviceReadBuffer::Poll | ( | void | ) | const [private] |
Definition at line 412 of file DeviceReadBuffer.cpp.
Referenced by run().
| void DeviceReadBuffer::WakePoll | ( | void | ) | const [private] |
Definition at line 201 of file DeviceReadBuffer.cpp.
Referenced by SetRequestPause(), Start(), and Stop().
| needed | Number of bytes we want to write |
Definition at line 655 of file DeviceReadBuffer.cpp.
Referenced by run().
| needed | Number of bytes we want to read | |
| max_wait | Number of milliseconds to wait for the needed data |
Definition at line 681 of file DeviceReadBuffer.cpp.
Referenced by Read().
| bool DeviceReadBuffer::IsPauseRequested | ( | void | ) | const [private] |
Definition at line 257 of file DeviceReadBuffer.cpp.
Referenced by HandlePausing(), Poll(), and WaitForUnused().
| bool DeviceReadBuffer::IsOpen | ( | void | ) | const [inline, private] |
Definition at line 75 of file DeviceReadBuffer.h.
Referenced by Poll(), run(), and WaitForUnused().
| void DeviceReadBuffer::ClosePipes | ( | void | ) | const [private] |
Definition at line 218 of file DeviceReadBuffer.cpp.
Referenced by run(), and WakePoll().
| uint DeviceReadBuffer::GetUnused | ( | void | ) | const [private] |
Definition at line 281 of file DeviceReadBuffer.cpp.
Referenced by WaitForUnused().
| uint DeviceReadBuffer::GetUsed | ( | void | ) | const [private] |
Definition at line 287 of file DeviceReadBuffer.cpp.
| uint DeviceReadBuffer::GetContiguousUnused | ( | void | ) | const [private] |
Definition at line 293 of file DeviceReadBuffer.cpp.
| bool DeviceReadBuffer::CheckForErrors | ( | ssize_t | read_len, | |
| size_t | requested_len, | |||
| uint & | err_cnt | |||
| ) | [private] |
Definition at line 532 of file DeviceReadBuffer.cpp.
Referenced by run().
| void DeviceReadBuffer::ReportStats | ( | void | ) | [private] |
Definition at line 698 of file DeviceReadBuffer.cpp.
Referenced by Read().
QString DeviceReadBuffer::videodevice [private] |
Definition at line 84 of file DeviceReadBuffer.h.
Referenced by HandlePausing(), Reset(), and Setup().
int DeviceReadBuffer::_stream_fd [private] |
Definition at line 85 of file DeviceReadBuffer.h.
Referenced by CheckForErrors(), HandlePausing(), IsOpen(), Poll(), Reset(), run(), and Setup().
int DeviceReadBuffer::wake_pipe[2] [mutable, private] |
Definition at line 86 of file DeviceReadBuffer.h.
Referenced by ClosePipes(), DeviceReadBuffer(), Poll(), run(), and WakePoll().
long DeviceReadBuffer::wake_pipe_flags[2] [mutable, private] |
Definition at line 87 of file DeviceReadBuffer.h.
Referenced by ClosePipes(), DeviceReadBuffer(), Poll(), and run().
DeviceReaderCB* DeviceReadBuffer::readerCB [private] |
Definition at line 89 of file DeviceReadBuffer.h.
Referenced by HandlePausing(), and Poll().
QMutex DeviceReadBuffer::lock [mutable, private] |
Definition at line 92 of file DeviceReadBuffer.h.
Referenced by CheckForErrors(), GetContiguousUnused(), GetUnused(), GetUsed(), IncrReadPointer(), IncrWritePointer(), IsEOF(), IsErrored(), IsPaused(), IsPauseRequested(), IsRunning(), Poll(), ReportStats(), Reset(), run(), SetPaused(), SetRequestPause(), Setup(), Start(), Stop(), WaitForPaused(), WaitForUnpause(), and WaitForUsed().
volatile bool DeviceReadBuffer::dorun [private] |
Definition at line 93 of file DeviceReadBuffer.h.
Referenced by Poll(), run(), Start(), Stop(), and WaitForUnused().
bool DeviceReadBuffer::eof [private] |
Definition at line 94 of file DeviceReadBuffer.h.
Referenced by CheckForErrors(), IsEOF(), run(), Setup(), Start(), and WaitForUsed().
bool DeviceReadBuffer::error [mutable, private] |
Definition at line 95 of file DeviceReadBuffer.h.
Referenced by CheckForErrors(), IsErrored(), Poll(), Reset(), run(), Setup(), Start(), and WaitForUsed().
bool DeviceReadBuffer::request_pause [private] |
Definition at line 96 of file DeviceReadBuffer.h.
Referenced by IsPauseRequested(), SetRequestPause(), Setup(), and WaitForUsed().
bool DeviceReadBuffer::paused [private] |
Definition at line 97 of file DeviceReadBuffer.h.
Referenced by IsPaused(), SetPaused(), Setup(), WaitForPaused(), and WaitForUnpause().
bool DeviceReadBuffer::using_poll [private] |
Definition at line 98 of file DeviceReadBuffer.h.
Referenced by DeviceReadBuffer(), run(), and Setup().
bool DeviceReadBuffer::poll_timeout_is_error [private] |
Definition at line 99 of file DeviceReadBuffer.h.
Referenced by Poll().
uint DeviceReadBuffer::max_poll_wait [private] |
Definition at line 100 of file DeviceReadBuffer.h.
Referenced by Poll().
size_t DeviceReadBuffer::size [private] |
Definition at line 102 of file DeviceReadBuffer.h.
Referenced by GetUnused(), ReportStats(), and Setup().
size_t DeviceReadBuffer::used [private] |
Definition at line 103 of file DeviceReadBuffer.h.
Referenced by GetUnused(), GetUsed(), IncrReadPointer(), IncrWritePointer(), Reset(), Setup(), and WaitForUsed().
size_t DeviceReadBuffer::read_quanta [private] |
Definition at line 104 of file DeviceReadBuffer.h.
Referenced by run(), Setup(), and WaitForUnused().
size_t DeviceReadBuffer::dev_read_size [private] |
Definition at line 105 of file DeviceReadBuffer.h.
size_t DeviceReadBuffer::min_read [private] |
Definition at line 106 of file DeviceReadBuffer.h.
unsigned char* DeviceReadBuffer::buffer [private] |
Definition at line 107 of file DeviceReadBuffer.h.
Referenced by IncrReadPointer(), IncrWritePointer(), Reset(), run(), Setup(), and ~DeviceReadBuffer().
unsigned char* DeviceReadBuffer::readPtr [private] |
Definition at line 108 of file DeviceReadBuffer.h.
Referenced by IncrReadPointer(), Read(), Reset(), and Setup().
unsigned char* DeviceReadBuffer::writePtr [private] |
Definition at line 109 of file DeviceReadBuffer.h.
Referenced by GetContiguousUnused(), IncrWritePointer(), Reset(), run(), and Setup().
unsigned char* DeviceReadBuffer::endPtr [private] |
Definition at line 110 of file DeviceReadBuffer.h.
Referenced by GetContiguousUnused(), IncrReadPointer(), IncrWritePointer(), Read(), run(), and Setup().
QWaitCondition DeviceReadBuffer::dataWait [mutable, private] |
Definition at line 112 of file DeviceReadBuffer.h.
Referenced by IncrWritePointer(), run(), and WaitForUsed().
QWaitCondition DeviceReadBuffer::runWait [private] |
Definition at line 113 of file DeviceReadBuffer.h.
QWaitCondition DeviceReadBuffer::pauseWait [private] |
Definition at line 114 of file DeviceReadBuffer.h.
Referenced by run(), SetPaused(), and WaitForPaused().
QWaitCondition DeviceReadBuffer::unpauseWait [private] |
Definition at line 115 of file DeviceReadBuffer.h.
Referenced by run(), SetPaused(), and WaitForUnpause().
size_t DeviceReadBuffer::max_used [private] |
Definition at line 118 of file DeviceReadBuffer.h.
Referenced by IncrWritePointer(), ReportStats(), and Setup().
size_t DeviceReadBuffer::avg_used [private] |
Definition at line 119 of file DeviceReadBuffer.h.
Referenced by IncrWritePointer(), ReportStats(), and Setup().
size_t DeviceReadBuffer::avg_cnt [private] |
Definition at line 120 of file DeviceReadBuffer.h.
Referenced by IncrWritePointer(), ReportStats(), and Setup().
MythTimer DeviceReadBuffer::lastReport [private] |
Definition at line 121 of file DeviceReadBuffer.h.
Referenced by ReportStats(), and Setup().
1.6.3