00001 #ifndef FIFOWRITER
00002 #define FIFOWRITER
00003
00004
00005 #include <QWaitCondition>
00006 #include <QString>
00007 #include <QMutex>
00008
00009
00010 #include "mythtvexp.h"
00011 #include "mthread.h"
00012
00013 using namespace std;
00014
00015 class FIFOWriter;
00016
00017 class FIFOThread : public MThread
00018 {
00019 public:
00020 FIFOThread() : MThread("FIFOThread"), m_parent(NULL), m_id(-1) {}
00021 virtual ~FIFOThread() { wait(); m_parent = NULL; m_id = -1; }
00022 void SetId(int id) { m_id = id; }
00023 void SetParent(FIFOWriter *parent) { m_parent = parent; }
00024 virtual void run(void);
00025 private:
00026 FIFOWriter *m_parent;
00027 int m_id;
00028 };
00029
00030 class MTV_PUBLIC FIFOWriter
00031 {
00032 friend class FIFOThread;
00033 public:
00034 FIFOWriter(int count, bool sync);
00035 ~FIFOWriter();
00036
00037 int FIFOInit(int id, QString desc, QString name, long size, int num_bufs);
00038 void FIFOWrite(int id, void *buf, long size);
00039 void FIFODrain(void);
00040
00041 private:
00042 void FIFOWriteThread(int id);
00043
00044 struct fifo_buf
00045 {
00046 struct fifo_buf *next;
00047 unsigned char *data;
00048 long blksize;
00049 } **fifo_buf, **fb_inptr, **fb_outptr;
00050
00051 FIFOThread *fifothrds;
00052 QMutex *fifo_lock;
00053 QWaitCondition *full_cond;
00054 QWaitCondition *empty_cond;
00055
00056 QString *filename, *fbdesc;
00057
00058 long *maxblksize;
00059 int *killwr, *fbcount;
00060 int num_fifos;
00061 bool usesync;
00062 };
00063
00064 #endif
00065