32
35
, m_seekable(false)
33
36
, m_mediaObject(parent)
35
39
connectToSource(source);
42
StreamReader::~StreamReader()
47
//------------------------------------------------------------------------------
48
// Thead safe because every changing function is locked ------------------------
49
//------------------------------------------------------------------------------
38
51
int StreamReader::currentBufferSize() const
40
53
return m_buffer.size();
43
void StreamReader::writeData(const QByteArray &data) {
44
QMutexLocker locker(&m_mutex);
46
m_buffer.append(data);
47
m_waitingForData.wakeAll();
56
quint64 StreamReader::currentPos() const
61
qint64 StreamReader::streamSize() const
66
bool StreamReader::streamSeekable() const
68
// TODO - problems with pull seeking and the way our current stack works.
73
//------------------------------------------------------------------------------
74
// Explicit thread safe by locking the mutex ---------------------------------
75
//------------------------------------------------------------------------------
50
77
void StreamReader::setCurrentPos(qint64 pos)
52
79
QMutexLocker locker(&m_mutex);
59
quint64 StreamReader::currentPos() const
85
void StreamReader::writeData(const QByteArray &data)
87
QMutexLocker locker(&m_mutex);
89
m_buffer.append(data);
90
m_waitingForData.wakeAll();
64
93
GstFlowReturn StreamReader::read(quint64 pos, int length, char *buffer)
66
95
QMutexLocker locker(&m_mutex);
68
98
if (currentPos() != pos) {
69
99
if (!streamSeekable()) {
82
112
m_waitingForData.wait(&m_mutex);
114
// Abort instantly if we got unlocked, whether we got sufficient data or not
115
// is absolutely unimportant at this point.
84
120
if (oldSize == currentBufferSize()) {
85
// We didn't get any data.
121
// We didn't get any data, check if we are at the end of stream already.
87
123
return GST_FLOW_UNEXPECTED;
89
return GST_FLOW_ERROR;
129
168
void StreamReader::unlock()
131
170
QMutexLocker locker(&m_mutex);
133
174
m_waitingForData.wakeAll();
136
void StreamReader::setStreamSize(qint64 newSize) {
177
void StreamReader::setStreamSize(qint64 newSize)
179
QMutexLocker locker(&m_mutex);
137
180
m_size = newSize;
140
qint64 StreamReader::streamSize() const {
144
void StreamReader::setStreamSeekable(bool seekable) {
183
void StreamReader::setStreamSeekable(bool seekable)
185
QMutexLocker locker(&m_mutex);
145
186
// if (seekable) {
146
187
// // The initial stream size of a seekable stream *must* not be 0 or
147
188
// // GStreamer will refuse to typefind.