aboutsummaryrefslogtreecommitdiff
path: root/src/plugins/Transports/mms/mmsstreamreader.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/plugins/Transports/mms/mmsstreamreader.cpp')
-rw-r--r--src/plugins/Transports/mms/mmsstreamreader.cpp11
1 files changed, 8 insertions, 3 deletions
diff --git a/src/plugins/Transports/mms/mmsstreamreader.cpp b/src/plugins/Transports/mms/mmsstreamreader.cpp
index 4d4ce34af..b50450a83 100644
--- a/src/plugins/Transports/mms/mmsstreamreader.cpp
+++ b/src/plugins/Transports/mms/mmsstreamreader.cpp
@@ -1,5 +1,5 @@
/***************************************************************************
- * Copyright (C) 2006-2008 by Ilya Kotov *
+ * Copyright (C) 2006-2011 by Ilya Kotov *
* forkotov02@hotmail.ru *
* *
* This program is free software; you can redistribute it and/or modify *
@@ -135,6 +135,8 @@ qint64 MMSStreamReader::bytesAvailable() const
void MMSStreamReader::run()
{
+ int to_read = 1024;
+ char prebuf[to_read];
m_handle = mmsx_connect (0, 0, m_url.toLocal8Bit().constData(), 128 * 1024);
if(!m_handle)
{
@@ -155,13 +157,15 @@ void MMSStreamReader::run()
forever
{
m_mutex.lock();
- int to_read = 1024;
+
if(m_buffer_at + to_read > m_buffer_size)
{
m_buffer_size = m_buffer_at + to_read;
m_buffer = (char *)realloc(m_buffer, m_buffer_size);
}
- len = mmsx_read (0, m_handle, m_buffer + m_buffer_at, to_read);
+ m_mutex.unlock();
+ len = mmsx_read (0, m_handle, prebuf, to_read);
+ m_mutex.lock();
if(len < 0)
{
m_mutex.unlock();
@@ -173,6 +177,7 @@ void MMSStreamReader::run()
}
break;
}
+ memcpy(m_buffer + m_buffer_at, prebuf, len);
m_buffer_at += len;
if(!m_ready)
checkBuffer();