aboutsummaryrefslogtreecommitdiffstats
path: root/src/modules
diff options
context:
space:
mode:
authorGravatar Fabio Bas2010-04-18 18:00:51 +0000
committerGravatar Fabio Bas2010-04-18 18:00:51 +0000
commit5eb2862e5c06e87b1e3def4519681a8fc54eecb2 (patch)
tree304c232a99c996160abb1efa1e0a2596f698428e /src/modules
parentremoved old Qt3 wrappers; (diff)
downloadKVIrc-5eb2862e5c06e87b1e3def4519681a8fc54eecb2.tar.gz
KVIrc-5eb2862e5c06e87b1e3def4519681a8fc54eecb2.tar.bz2
KVIrc-5eb2862e5c06e87b1e3def4519681a8fc54eecb2.zip
dcc video tweaking, should require a lot less cpu time now
git-svn-id: https://svn.kvirc.de/svn/trunk/kvirc@4261 17fca916-40b9-46aa-a4ea-0a15b648b75c
Diffstat (limited to 'src/modules')
-rw-r--r--src/modules/dcc/video.cpp47
-rw-r--r--src/modules/dcc/video.h6
2 files changed, 17 insertions, 36 deletions
diff --git a/src/modules/dcc/video.cpp b/src/modules/dcc/video.cpp
index fd1fa8782..e2232ee18 100644
--- a/src/modules/dcc/video.cpp
+++ b/src/modules/dcc/video.cpp
@@ -60,6 +60,8 @@
#include <sys/ioctl.h>
+#define FRAME_DURATION 200 // 1 / 5fps = 200msec
+
extern KviDccBroker * g_pDccBroker;
#ifndef COMPILE_DISABLE_DCC_VIDEO
@@ -92,8 +94,6 @@ KviDccVideoThread::KviDccVideoThread(KviWindow * wnd,kvi_socket_t fd,KviDccVideo
m_pOpt = opt;
m_bPlaying = false;
m_bRecording = false;
- m_pInfoMutex = new KviMutex();
- m_bRecordingRequestPending = false;
//local video input
if(!g_pVideoDevicePool)
@@ -121,12 +121,12 @@ KviDccVideoThread::~KviDccVideoThread()
delete m_pOpt->pCodec;
delete m_pOpt;
- delete m_pInfoMutex;
#endif
}
bool KviDccVideoThread::readWriteStep()
{
+// qDebug("KviDccVideoThread::readWriteStep()");
#ifndef COMPILE_DISABLE_DCC_VIDEO
// Socket management
bool bCanRead;
@@ -137,13 +137,12 @@ bool KviDccVideoThread::readWriteStep()
while(bCanRead)
{
unsigned int actualSize = m_inFrameBuffer.size();
- m_inFrameBuffer.resize(actualSize + 4096);
- int readLen = kvi_socket_recv(m_fd,(void *)(m_inFrameBuffer.data() + actualSize),4096);
+ m_inFrameBuffer.resize(actualSize + 16384);
+ int readLen = kvi_socket_recv(m_fd,(void *)(m_inFrameBuffer.data() + actualSize),16384);
if(readLen > 0)
{
- if(readLen < 4096)m_inFrameBuffer.resize(actualSize + readLen);
+ if(readLen < 16384)m_inFrameBuffer.resize(actualSize + readLen);
m_pOpt->pCodec->decode(&m_inFrameBuffer,&m_videoInSignalBuffer,&m_textInSignalBuffer);
-//#warning "A maximum length for the signal buffer is actually needed!!!"
} else {
bCanRead=false;
// if(!handleInvalidSocketRead(readLen))return false;
@@ -165,7 +164,6 @@ bool KviDccVideoThread::readWriteStep()
}
}
}
-//#warning "Usleep here ?"
}
#endif // !COMPILE_DISABLE_DCC_VOICE
return true;
@@ -173,6 +171,7 @@ bool KviDccVideoThread::readWriteStep()
bool KviDccVideoThread::videoStep()
{
+// qDebug("KviDccVideoThread::videoStep()");
#ifndef COMPILE_DISABLE_DCC_VIDEO
// Are we playing ?
if(m_bPlaying)
@@ -205,6 +204,7 @@ bool KviDccVideoThread::videoStep()
bool KviDccVideoThread::textStep()
{
+// qDebug("KviDccVideoThread::textStep()");
#ifndef COMPILE_DISABLE_DCC_VIDEO
// Are we playing ?
if(m_bPlaying)
@@ -240,6 +240,7 @@ bool KviDccVideoThread::textStep()
bool KviDccVideoThread::handleIncomingData(KviDccThreadIncomingData * data,bool bCritical)
{
+// qDebug("KviDccVideoThread::handleIncomingData");
__range_valid(data->iLen);
__range_valid(data->buffer);
char * aux = data->buffer;
@@ -306,17 +307,12 @@ void KviDccVideoThread::startRecording()
//debug("Start recording");
if(m_bRecording)return; // already started
- {
-// debug("Posting event");
- KviThreadDataEvent<int> * e = new KviThreadDataEvent<int>(KVI_DCC_THREAD_EVENT_ACTION);
- e->setData(new int(KVI_DCC_VIDEO_THREAD_ACTION_START_RECORDING));
- postEvent(KviDccThread::parent(),e);
+// debug("Posting event");
+ KviThreadDataEvent<int> * e = new KviThreadDataEvent<int>(KVI_DCC_THREAD_EVENT_ACTION);
+ e->setData(new int(KVI_DCC_VIDEO_THREAD_ACTION_START_RECORDING));
+ postEvent(KviDccThread::parent(),e);
- m_bRecording = true;
- m_bRecordingRequestPending = false;
-// } else {
-// m_bRecordingRequestPending = true;
- }
+ m_bRecording = true;
#endif
}
@@ -324,7 +320,6 @@ void KviDccVideoThread::stopRecording()
{
#ifndef COMPILE_DISABLE_DCC_VIDEO
//debug("Stop recording");
- m_bRecordingRequestPending = false;
if(!m_bRecording)return; // already stopped
KviThreadDataEvent<int> * e = new KviThreadDataEvent<int>(KVI_DCC_THREAD_EVENT_ACTION);
@@ -364,11 +359,10 @@ void KviDccVideoThread::stopPlaying()
void KviDccVideoThread::run()
{
+// qDebug("KviDccVideoThread::run()");
#ifndef COMPILE_DISABLE_DCC_VIDEO
for(;;)
{
- m_uSleepTime = 0;
-
// Dequeue events
while(KviThreadEvent * e = dequeueEvent())
{
@@ -393,15 +387,8 @@ void KviDccVideoThread::run()
if(!videoStep())goto exit_dcc;
if(!textStep())goto exit_dcc;
- m_pInfoMutex->lock();
- m_pInfoMutex->unlock();
-
- //if(m_uSleepTime)usleep(m_uSleepTime);
+ usleep(FRAME_DURATION*1000);
// qDebug("in %d out %d in_sig %d out_sig %d", m_inFrameBuffer.size(), m_outFrameBuffer.size(), m_videoInSignalBuffer.size(), m_videoOutSignalBuffer.size());
- usleep(200);
-
- // Start recording if the request was not fulfilled yet
- if(m_bRecordingRequestPending)startRecording();
}
@@ -489,7 +476,7 @@ KviDccVideo::KviDccVideo(KviFrame *pFrm,KviDccDescriptor * dcc,const char * name
connect(&m_Timer, SIGNAL(timeout()), this, SLOT(slotUpdateImage()) );
- m_Timer.start(200); //5fps
+ m_Timer.start(FRAME_DURATION);
m_pMarshal = new KviDccMarshal(this);
connect(m_pMarshal,SIGNAL(error(int)),this,SLOT(handleMarshalError(int)));
diff --git a/src/modules/dcc/video.h b/src/modules/dcc/video.h
index 628c319d1..f385ef8f0 100644
--- a/src/modules/dcc/video.h
+++ b/src/modules/dcc/video.h
@@ -81,12 +81,6 @@ protected:
KviDataBuffer m_textOutSignalBuffer;
bool m_bPlaying;
bool m_bRecording;
- bool m_bRecordingRequestPending;
- unsigned int m_uSleepTime;
- KviMutex * m_pInfoMutex;
- // stuff protected by the mutex:
- int m_iInputBufferSize;
- int m_iOutputBufferSize;
protected:
QImage m_inImage;
QImage m_outImage;