00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
#ifndef VIDEO_DEVICE_HPP
00024
#define VIDEO_DEVICE_HPP
00025
00026
#ifdef HAVE_CONFIG_H
00027
#include "config.h"
00028
#endif
00029
00030
#include <qglobal.h>
00031
00032
#if (QT_VERSION >= 0x030000)
00033
#include <qmutex.h>
00034
#endif
00035
00036
#include <qarray.h>
00037
#include <qcolor.h>
00038
#include <qdom.h>
00039
#include <qimage.h>
00040
#include <qlist.h>
00041
#include <qobject.h>
00042
#include <qsocketnotifier.h>
00043
#include <qtimer.h>
00044
#include <qthread.h>
00045
#include <qvector.h>
00046
00047
#include "VideoFrame.h"
00048
00049
#include "TVChannel.h"
00050
00051
class CChannelEditorDlg;
00052
00053 class CVideoDevice:
public QObject,
protected QThread
00054 {
00055
friend class CVideoCollector;
00056 Q_OBJECT
00057
public:
00058 enum Signals {
00059
frame_ready = 1,
00060 };
00061
00062
private:
00063
enum Palettes {
00064 RGB,
00065 YUV,
00066 };
00067
00068 QList<CVideoFrame> m_VideoFrames;
00069 QList<CVideoFrame> m_EmptyFrames, m_FullFrames;
00070
CVideoFrame *m_pFillFrame;
00071 QMutex m_BufMutex;
00072
00073 QWaitCondition m_WaitFromFrame;
00074
CChannelEditorDlg *m_pTunerDlg;
00075
00076
int m_CaptureCount;
00077
00078
void IncrementPalette(Palettes);
00079
void DecrementPalette(Palettes);
00080
00081
void ParseTVChannels(
const QDomNode &);
00082
void GetTVChannels(QDomNode &) const;
00083
00084 private slots:
00085 virtual
void NewFrequency(
float) = 0;
00086
void NewCurrentChannel();
00087
00088 protected:
00089 QList<
TVChannel> m_TVChannels;
00090
00091 bool m_Validated;
00092 QString m_NodeName, m_IntfName, m_SerialNumber;
00093 bool m_HasDisplayDialog, m_HasFormatDialog, m_HasSourceDialog, m_HasTunerDialog;
00094 bool m_Mutable;
00095
00096 int m_OpenCount;
00097
00098 int m_PalRGB;
00099 int m_PalYUV;
00100 uint m_RequestedBuffers, m_Buffers;
00101 int m_FrameCount;
00102 int m_FrameDropped;
00103
00104 QSize m_ImageSize;
00105 QVector<QImage> m_RGB;
00106 QVector<QImage> m_Y, m_U, m_V;
00107 QImage *m_pNullImage;
00108 QRgb m_GrayScale[256];
00109
00110
int GetCaptureCount() const;
00111
00112 virtual
bool Init() = 0;
00113 virtual
void Exit() = 0;
00114
00115 virtual
void CreateImagesRGB() = 0;
00116 virtual
void DeleteImagesRGB() = 0;
00117 virtual
void CreateImagesYUV() = 0;
00118 virtual
void DeleteImagesYUV() = 0;
00119
00120
void CreateVideoFrames();
00121
void DeleteVideoFrames();
00122
CVideoFrame *GetFillFrame();
00123
void ReturnFillFrame(
bool filled = true);
00124
00125 virtual
bool StartCapture() = 0;
00126 virtual
void StopCapture() = 0;
00127
00128
void SendSignal(Signals s);
00129
00130 public:
00131 enum ErrorCodes {
00132
NoError,
00133
SizeChangeFailed,
00134 };
00135
00136
CVideoDevice();
00137
virtual ~CVideoDevice();
00138
00139
virtual bool event(QEvent *);
00140
00141
virtual void SetConfiguration(
const QDomNode &);
00142
virtual void GetConfiguration(QDomNode &) const;
00143
00144
bool IsValid() const;
00145
bool Open(uint buffers = 0);
00146
void Close();
00147
bool IsOpen() const;
00148
00149 virtual
int GetNumberOfInputs() const = 0;
00150
00162 virtual
void SetInput(
int input) = 0;
00172 virtual
int GetInput() const = 0;
00185 virtual
int GetNumberOfTuners() const = 0;
00196 virtual
void SetTuner(
int tuner) = 0;
00197 virtual
int GetTuner() const = 0;
00198
00218
unsigned int GetNumberOfTVChannels() const;
00219
00230
TVChannel QueryTVChannel(
int preset) const;
00231
00240
TVChannel QueryCurrentTVChannel() const;
00241
00252
TVChannel SelectTVChannel(
int preset);
00253
00258
TVChannel SelectNextTVChannel(
bool wrap = true);
00259
00264
TVChannel SelectPrevTVChannel(
bool wrap = true);
00265
00266
00274 virtual
long GetDescriptor() const = 0;
00275
00276 QString GetNodeName() const;
00277 QString GetIntfName() const;
00278 QString GetSerialNumber() const;
00279
00280
int GetBuffers() const;
00281
00282
CVideoFrame *GetLatestVideoFrame(
int backlog = 0);
00283
00284
bool HasDisplayDialog() const;
00285
bool HasFormatDialog() const;
00286
bool HasSourceDialog() const;
00287
bool HasTunerDialog() const;
00288
00289 virtual QSize GetSize() const;
00290
00291
00292
bool IsMutable() const;
00293 virtual
void Mute(
bool on) const = 0;
00294
00295 public slots:
00296 virtual
void ShowDisplayDialog() = 0;
00297 virtual
void ShowFormatDialog() = 0;
00298 virtual
void ShowSourceDialog() = 0;
00299 virtual
void ShowTunerDialog();
00300
00301
void EnableRGB();
00302
void DisableRGB();
00303
void EnableYUV();
00304
void DisableYUV();
00305
00306 signals:
00308
void Opened();
00310
void Closed();
00312
void SizeChanged(const QSize &);
00314
void FramerateChanged(
int rate);
00316
void Error(
int err_num);
00318
void FrameReady();
00320
void TVChannelChanged();
00321 };
00322
00323 #endif