diff options
Diffstat (limited to 'client/decoder.cc')
| -rw-r--r-- | client/decoder.cc | 39 | 
1 files changed, 33 insertions, 6 deletions
| diff --git a/client/decoder.cc b/client/decoder.cc index e181516..fd2464b 100644 --- a/client/decoder.cc +++ b/client/decoder.cc @@ -28,13 +28,23 @@  #include "info.h" +#define READ_DV_FROM_FILE +  #include "dv.h" -//#include "dvfile.h" +#ifdef READ_DV_FROM_FILE +#include "dvfile.h" +#else/* READ_DV_FROM_FILE*/  #include "dv1394.h" +#endif/* READ_DV_FROM_FILE*/ + +#include <QEvent> +#include <QApplication> -Decoder::Decoder() +Decoder::Decoder(): semaphore(1)  {    frame  = NULL; +  running = true; +  qApp->installEventFilter(this);  }  Decoder::~Decoder() @@ -42,16 +52,33 @@ Decoder::~Decoder()  void Decoder::run()  { -  dv1394 reader; +  semaphore.acquire(); // Lock the shutdown process +#ifdef READ_DV_FROM_FILE +  dvfile reader; +#else/* READ_DV_FROM_FILE*/ +  dv1394 reader;    reader.connect(); +#endif/* READ_DV_FROM_FILE*/ -  while(1) { -    frame = reader.readFrame(); +  while(running) { +    frame = new Frame(reader.readFrame());    } +  semaphore.release(); // Unlock the shutdown process  } -unsigned char *Decoder::getFrame() +Frame *Decoder::getFrame()  {    return frame;  } + +bool Decoder::eventFilter(QObject *o, QEvent *e) +{ +  if (e->type() == QEvent::Close) { +    running = false; // Tell the thread to stop. +    semaphore.acquire(); // Wait for the thread to stop. +  } + +  // standard event processing +  return false; +} | 
