1
0
mirror of https://github.com/qTox/qTox.git synced 2024-03-22 14:00:36 +08:00
qTox/src/video/videosource.h

61 lines
1.1 KiB
C
Raw Normal View History

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>
#include <QRgb>
2014-10-07 22:59:21 +08:00
struct VideoFrame
2014-10-07 22:59:21 +08:00
{
enum ColorFormat
{
2014-10-15 20:46:01 +08:00
NONE,
BGR,
YUV,
};
2014-10-15 20:46:01 +08:00
QByteArray frameData;
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) {}
void setNull()
{
2014-10-15 20:46:01 +08:00
frameData = QByteArray();
}
bool isNull()
{
2014-10-15 20:46:01 +08:00
return frameData.isEmpty();
}
// 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];
return qRgb(r, g, b);
}
};
2014-10-08 20:25:32 +08:00
Q_DECLARE_METATYPE(VideoFrame)
2014-10-08 20:25:32 +08:00
class VideoSource : public QObject
{
Q_OBJECT
2014-10-08 20:25:32 +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:
void frameAvailable(const VideoFrame frame);
2014-10-08 20:25:32 +08:00
2014-10-07 22:59:21 +08:00
};
#endif // VIDEOSOURCE_H