2014-10-07 22:59:21 +08:00
|
|
|
#ifndef VIDEOSOURCE_H
|
|
|
|
#define VIDEOSOURCE_H
|
|
|
|
|
2014-10-08 20:25:32 +08:00
|
|
|
#include <QObject>
|
2014-10-07 22:59:21 +08:00
|
|
|
#include <QSize>
|
2014-10-14 16:57:45 +08:00
|
|
|
#include <QRgb>
|
2014-10-07 22:59:21 +08:00
|
|
|
|
2014-10-14 16:57:45 +08:00
|
|
|
struct VideoFrame
|
2014-10-07 22:59:21 +08:00
|
|
|
{
|
2014-10-14 16:57:45 +08:00
|
|
|
enum ColorFormat
|
|
|
|
{
|
2014-10-15 20:46:01 +08:00
|
|
|
NONE,
|
2014-10-14 16:57:45 +08:00
|
|
|
BGR,
|
|
|
|
YUV,
|
|
|
|
};
|
|
|
|
|
2014-10-15 20:46:01 +08:00
|
|
|
QByteArray frameData;
|
2014-10-14 16:57:45 +08:00
|
|
|
QSize resolution;
|
|
|
|
ColorFormat format;
|
|
|
|
|
2014-10-15 20:46:01 +08:00
|
|
|
VideoFrame() : format(NONE) {}
|
|
|
|
VideoFrame(QByteArray d, QSize r, ColorFormat f) : frameData(d), resolution(r), format(f) {}
|
|
|
|
|
2014-10-14 16:57:45 +08:00
|
|
|
void setNull()
|
|
|
|
{
|
2014-10-15 20:46:01 +08:00
|
|
|
frameData = QByteArray();
|
2014-10-14 16:57:45 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
bool isNull()
|
|
|
|
{
|
2014-10-15 20:46:01 +08:00
|
|
|
return frameData.isEmpty();
|
2014-10-14 16:57:45 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
// assumes format is BGR
|
|
|
|
QRgb getPixel(int x, int y)
|
|
|
|
{
|
2014-10-15 20:46:01 +08:00
|
|
|
char b = frameData.data()[resolution.width() * 3 * y + x * 3 + 0];
|
|
|
|
char g = frameData.data()[resolution.width() * 3 * y + x * 3 + 1];
|
|
|
|
char r = frameData.data()[resolution.width() * 3 * y + x * 3 + 2];
|
2014-10-14 16:57:45 +08:00
|
|
|
|
|
|
|
return qRgb(r, g, b);
|
|
|
|
}
|
|
|
|
};
|
2014-10-08 20:25:32 +08:00
|
|
|
|
2014-10-14 16:57:45 +08:00
|
|
|
Q_DECLARE_METATYPE(VideoFrame)
|
2014-10-08 20:25:32 +08:00
|
|
|
|
2014-10-14 16:57:45 +08:00
|
|
|
class VideoSource : public QObject
|
|
|
|
{
|
|
|
|
Q_OBJECT
|
2014-10-08 20:25:32 +08:00
|
|
|
|
2014-10-14 16:57:45 +08:00
|
|
|
public:
|
2014-10-07 22:59:21 +08:00
|
|
|
virtual void subscribe() = 0;
|
|
|
|
virtual void unsubscribe() = 0;
|
2014-10-08 20:25:32 +08:00
|
|
|
|
|
|
|
signals:
|
2014-10-14 16:57:45 +08:00
|
|
|
void frameAvailable(const VideoFrame frame);
|
2014-10-08 20:25:32 +08:00
|
|
|
|
2014-10-07 22:59:21 +08:00
|
|
|
};
|
|
|
|
|
|
|
|
#endif // VIDEOSOURCE_H
|