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(); | 
