summaryrefslogtreecommitdiff
path: root/client
diff options
context:
space:
mode:
authordeva <deva>2006-04-10 14:14:31 +0000
committerdeva <deva>2006-04-10 14:14:31 +0000
commitff2a0b78a229d2fac6162d2fa88f3e058b6382d8 (patch)
treee5195cf2aea739981e1c6c3a8a56b216b5db9fd7 /client
parentd90e7cb1937c4903fcfe5593a6a59be52763f235 (diff)
*** empty log message ***
Diffstat (limited to 'client')
-rw-r--r--client/decoder.cc19
-rw-r--r--client/decoder.h8
-rw-r--r--client/miav_client.cc6
-rw-r--r--client/player.cc7
4 files changed, 26 insertions, 14 deletions
diff --git a/client/decoder.cc b/client/decoder.cc
index fd2464b..5c2cce5 100644
--- a/client/decoder.cc
+++ b/client/decoder.cc
@@ -42,7 +42,7 @@
Decoder::Decoder(): semaphore(1)
{
- frame = NULL;
+ frame = NULL;
running = true;
qApp->installEventFilter(this);
}
@@ -62,14 +62,25 @@ void Decoder::run()
#endif/* READ_DV_FROM_FILE*/
while(running) {
- frame = new Frame(reader.readFrame());
+ char *tmp = (char*)reader.readFrame();
+ mutex.lock();
+ if(frame) free(frame);
+ frame = tmp;
+ mutex.unlock();
}
semaphore.release(); // Unlock the shutdown process
}
-Frame *Decoder::getFrame()
+char *Decoder::getFrame()
{
- return frame;
+ char *tmp;
+
+ mutex.lock();
+ tmp = frame;
+ frame = NULL;
+ mutex.unlock();
+
+ return tmp;
}
bool Decoder::eventFilter(QObject *o, QEvent *e)
diff --git a/client/decoder.h b/client/decoder.h
index 3a1b30f..6638189 100644
--- a/client/decoder.h
+++ b/client/decoder.h
@@ -29,7 +29,7 @@
#include <QThread>
#include <QSemaphore>
-#include "frame.h"
+#include <QMutex>
class Decoder : public QThread
{
@@ -38,7 +38,7 @@ public:
Decoder();
~Decoder();
- Frame *getFrame();
+ char *getFrame();
void run();
@@ -47,9 +47,9 @@ protected:
private:
volatile bool running;
- volatile bool stopped;
- Frame *frame;
+ char *frame;
QSemaphore semaphore;
+ QMutex mutex;
};
#endif/*__MIAV_DECODER_H__*/
diff --git a/client/miav_client.cc b/client/miav_client.cc
index 6122093..81cde56 100644
--- a/client/miav_client.cc
+++ b/client/miav_client.cc
@@ -47,12 +47,14 @@ int main(int argc, char *argv[])
MainWindow mainwindow;
+ NetworkSender sender;
Decoder decoder;
Player player(mainwindow.getVideoWidget(), &decoder);
- NetworkSender sender;
+
+ int fps = 24;
decoder.start();
- player.start(40); // 100: 10fps, 40: 25fps
+ player.start(1000 / fps);
sender.start();
return app.exec();
diff --git a/client/player.cc b/client/player.cc
index 1689dcf..a8f6152 100644
--- a/client/player.cc
+++ b/client/player.cc
@@ -29,8 +29,6 @@
#define WIDTH 720
#define HEIGHT 576
-//#define COLORSPACE_YV12
-
static int num = 0;
Player::Player(QWidget *w, Decoder *d)
@@ -52,13 +50,14 @@ Player::~Player()
void Player::show_frame()
{
- Frame *frame;
+ char *frame;
fprintf(stderr, "Frame!%d\n", num++);
frame = decoder->getFrame();
if(!frame) return;
- dvdecoder.decode((char*)frame->data);
+ dvdecoder.decode(frame);
+ free(frame);
render.width = widget->width();
render.height = widget->height();