-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathCameraFilter.cpp
More file actions
44 lines (38 loc) · 1.41 KB
/
CameraFilter.cpp
File metadata and controls
44 lines (38 loc) · 1.41 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
#include "CameraFilter.h"
CameraFilter::CameraFilter(QObject *parent) : _qmlCamera(nullptr)
{
Q_UNUSED(parent)
}
QObject *CameraFilter::getQmlCamera() const
{
return _qmlCamera;
}
void CameraFilter::setQmlCamera(QObject *qmlCamera)
{
this->_qmlCamera = qmlCamera;
if(_qmlCamera)
{
_camera = qvariant_cast<QCamera*>(_qmlCamera->property("mediaObject"));
QCameraViewfinderSettings cameraSettings = _camera->viewfinderSettings();
cameraSettings.setPixelFormat(QVideoFrame::Format_YUYV);
cameraSettings.setMinimumFrameRate(15);
cameraSettings.setMaximumFrameRate(15);
cameraSettings.setResolution(QSize(640, 360));
_camera->setViewfinderSettings(cameraSettings);
if(_probe.setSource(_camera))
connect(&_probe, SIGNAL(videoFrameProbed(const QVideoFrame &)), this, SLOT(_onProcssFram(const QVideoFrame &)));
}
}
void CameraFilter::_onProcssFram(const QVideoFrame &frame)
{
if(!frame.isValid())
return;
QVideoFrame cloneFrame(frame);
// qDebug() << "current pix fmt:" << cloneFrame.pixelFormat();
// qDebug() << "width:" << cloneFrame.width() << "height:" << cloneFrame.height();
if(cloneFrame.map(QAbstractVideoBuffer::WriteOnly)) {
// qDebug() << "提交一帧 len:", cloneFrame.bytesPerLine();
emit getOneFrame(cloneFrame);
cloneFrame.unmap();
}
}