diff options
author | deva <deva> | 2006-04-10 14:14:31 +0000 |
---|---|---|
committer | deva <deva> | 2006-04-10 14:14:31 +0000 |
commit | ff2a0b78a229d2fac6162d2fa88f3e058b6382d8 (patch) | |
tree | e5195cf2aea739981e1c6c3a8a56b216b5db9fd7 /client | |
parent | d90e7cb1937c4903fcfe5593a6a59be52763f235 (diff) |
*** empty log message ***
Diffstat (limited to 'client')
-rw-r--r-- | client/decoder.cc | 19 | ||||
-rw-r--r-- | client/decoder.h | 8 | ||||
-rw-r--r-- | client/miav_client.cc | 6 | ||||
-rw-r--r-- | client/player.cc | 7 |
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(); |