00001
00002
00003 #ifndef _ASISTREAMHANDLER_H_
00004 #define _ASISTREAMHANDLER_H_
00005
00006 #include <vector>
00007 using namespace std;
00008
00009 #include <QString>
00010 #include <QMutex>
00011 #include <QMap>
00012
00013 #include "streamhandler.h"
00014 #include "mythmiscutil.h"
00015
00016 class ASIStreamHandler;
00017 class DTVSignalMonitor;
00018 class ASIChannel;
00019 class DeviceReadBuffer;
00020 class ThreadedFileWriter;
00021
00022 typedef enum ASIClockSource
00023 {
00024 kASIInternalClock = 0,
00025 kASIExternalClock = 1,
00026 kASIRecoveredReceiveClock = 2,
00027 kASIExternalClock2 = 1,
00028 } ASIClockSource;
00029
00030 typedef enum ASIRXMode
00031 {
00032 kASIRXRawMode = 0,
00033 kASIRXSyncOn188 = 1,
00034 kASIRXSyncOn204 = 2,
00035 kASIRXSyncOnActualSize = 3,
00036 kASIRXSyncOnActualConvertTo188 = 4,
00037 kASIRXSyncOn204ConvertTo188 = 5,
00038 } ASIRXMode;
00039
00040
00041
00042
00043
00044
00045 class ASIStreamHandler : public StreamHandler
00046 {
00047 public:
00048 static ASIStreamHandler *Get(const QString &devicename);
00049 static void Return(ASIStreamHandler * & ref);
00050
00051 virtual void AddListener(MPEGStreamData *data,
00052 bool allow_section_reader = false,
00053 bool needs_drb = false,
00054 QString output_file = QString())
00055 {
00056 StreamHandler::AddListener(data, false, true, output_file);
00057 }
00058
00059 void SetClockSource(ASIClockSource cs);
00060 void SetRXMode(ASIRXMode m);
00061
00062 private:
00063 ASIStreamHandler(const QString &);
00064
00065 bool Open(void);
00066 void Close(void);
00067
00068 virtual void run(void);
00069
00070 virtual void PriorityEvent(int fd);
00071
00072 virtual void AddNamedOutputFile(const QString &file);
00073 virtual void RemoveNamedOutputFile(const QString &file);
00074
00075 virtual void SetRunningDesired(bool desired);
00076
00077 private:
00078 int _device_num;
00079 int _buf_size;
00080 int _fd;
00081 uint _packet_size;
00082 ASIClockSource _clock_source;
00083 ASIRXMode _rx_mode;
00084 DeviceReadBuffer *_drb;
00085
00086 ThreadedFileWriter *_mpts;
00087 QMap<QString,int> _mpts_files;
00088
00089
00090 static QMutex _handlers_lock;
00091 static QMap<QString, ASIStreamHandler*> _handlers;
00092 static QMap<QString, uint> _handlers_refcnt;
00093 };
00094
00095 #endif // _ASISTREAMHANDLER_H_