55#include " workmodule.h"
66#include " modelmanger.h"
77
8- #include < QCameraInfo >
8+ #include < QMediaDevices >
99#include < QMutex>
1010#include < QMutexLocker>
1111#include < QtConcurrent>
@@ -34,44 +34,42 @@ void ErollThread::Start(QString actionId, int socket)
3434void ErollThread::run ()
3535{
3636 m_camera.reset ();
37- auto cameras = QCameraInfo::availableCameras ();
38- for (const auto &obj : qAsConst ( cameras) ) {
37+ auto cameras = QMediaDevices::videoInputs ();
38+ for (const QCameraDevice &obj : cameras) {
3939 m_camera.reset (new QCamera (obj));
4040 if (m_camera->isAvailable ())
4141 break ;
4242 }
4343
44-
4544 if (m_camera.isNull ()) {
4645 qDebug () << " open camera fail" ;
4746 Q_EMIT processStatus (m_actionId, FaceEnrollException);
4847 return ;
4948 }
5049
51- m_camera->setCaptureMode (QCamera::CaptureStillImage);
52- m_imageCapture.reset (new QCameraImageCapture (m_camera.data ()));
53- m_imageCapture->setCaptureDestination (QCameraImageCapture::CaptureToBuffer);
54- QList<QSize> supportedResolutions = m_imageCapture->supportedResolutions ();
50+ m_captureSession.reset (new QMediaCaptureSession);
51+ m_captureSession->setCamera (m_camera.data ());
52+ m_imageCapture.reset (new QImageCapture);
53+ m_captureSession->setImageCapture (m_imageCapture.data ());
54+ QList<QSize> supportedResolutions = m_camera->cameraDevice ().photoResolutions ();
5555 if (supportedResolutions.contains (QSize (800 , 600 ))) {
56- auto settings = m_imageCapture->encodingSettings ();
57- settings.setResolution (QSize (800 , 600 ));
58- m_imageCapture->setEncodingSettings (settings);
56+ m_imageCapture->setResolution (QSize (800 , 600 ));
5957 }
60- connect (m_camera.data (), &QCamera::stateChanged, this , &ErollThread::updateCameraState);
61- connect (m_imageCapture.data (), &QCameraImageCapture::readyForCaptureChanged, this , &ErollThread::readyForCapture);
62- connect (m_imageCapture.data (), &QCameraImageCapture::imageCaptured, this , &ErollThread::processCapturedImage);
63- connect (m_imageCapture.data (), QOverload<int , QCameraImageCapture::Error, const QString &>::of (&QCameraImageCapture::error),
58+ connect (m_imageCapture.data (), &QImageCapture::readyForCaptureChanged, this , &ErollThread::readyForCapture);
59+ connect (m_imageCapture.data (), &QImageCapture::imageCaptured, this , &ErollThread::processCapturedImage);
60+ connect (m_imageCapture.data (), QOverload<int , QImageCapture::Error, const QString &>::of (&QImageCapture::errorOccurred),
6461 this , &ErollThread::captureError);
6562 m_camera->start ();
63+ m_imageCapture->capture ();
6664}
6765
6866void ErollThread::Stop ()
6967{
7068 qDebug () << " ErollThread::Stop thread:" << QThread::currentThreadId ();
71- m_imageCapture->cancelCapture ();
69+ // m_imageCapture->cancelCapture();
7270 m_stopCapture = true ;
7371 m_camera->stop ();
74- m_camera->unload ();
72+ // m_camera->unload();
7573 close (m_fileSocket);
7674}
7775
@@ -115,10 +113,10 @@ void ErollThread::sendCapture(QImage &img)
115113 free (buf);
116114}
117115
118- void ErollThread::updateCameraState (QCamera::State state)
119- {
120- qInfo () << " updateCameraState" << state;
121- }
116+ // void ErollThread::updateCameraState(QCamera::State state)
117+ // {
118+ // qInfo() << "updateCameraState" << state;
119+ // }
122120
123121void ErollThread::readyForCapture (bool ready)
124122{
@@ -128,10 +126,12 @@ void ErollThread::readyForCapture(bool ready)
128126 }
129127}
130128
131- void ErollThread::captureError (int , QCameraImageCapture ::Error, const QString &errorString)
129+ void ErollThread::captureError (int err, QImageCapture ::Error, const QString &errorString)
132130{
133- qDebug () << " read camera fail:" << errorString;
134- Q_EMIT processStatus (m_actionId, FaceEnrollException);
131+ if (err > 0 ) {
132+ qDebug () << " read camera fail:" << errorString;
133+ Q_EMIT processStatus (m_actionId, FaceEnrollException);
134+ }
135135 return ;
136136}
137137
@@ -297,40 +297,40 @@ void VerifyThread::run()
297297{
298298 qDebug () << " Verify run" ;
299299 m_camera.reset ();
300- auto cameras = QCameraInfo::availableCameras ();
301- for (const auto &obj : qAsConst (cameras)) {
300+ m_camera.reset ();
301+ auto cameras = QMediaDevices::videoInputs ();
302+ for (const QCameraDevice &obj : cameras) {
302303 m_camera.reset (new QCamera (obj));
303304 if (m_camera->isAvailable ())
304305 break ;
305306 }
307+
306308 if (m_camera.isNull ()) {
307309 qDebug () << " open camera fail" ;
308310 Q_EMIT processStatus (m_actionId, FaceEnrollException);
309311 return ;
310312 }
311313
312- m_camera->setCaptureMode (QCamera::CaptureStillImage);
313- m_imageCapture.reset (new QCameraImageCapture (m_camera.data ()));
314- m_imageCapture->setCaptureDestination (QCameraImageCapture::CaptureToBuffer);
315- QList<QSize> supportedResolutions = m_imageCapture->supportedResolutions ();
314+ m_captureSession.reset (new QMediaCaptureSession);
315+ m_captureSession->setCamera (m_camera.data ());
316+ m_imageCapture.reset (new QImageCapture);
317+ m_captureSession->setImageCapture (m_imageCapture.data ());
318+ QList<QSize> supportedResolutions = m_camera->cameraDevice ().photoResolutions ();
316319 if (supportedResolutions.contains (QSize (800 , 600 ))) {
317- auto settings = m_imageCapture->encodingSettings ();
318- settings.setResolution (QSize (800 , 600 ));
319- m_imageCapture->setEncodingSettings (settings);
320+ m_imageCapture->setResolution (QSize (800 , 600 ));
320321 }
321322
322- connect (m_camera.data (), &QCamera::stateChanged, this , &VerifyThread::updateCameraState);
323- connect (m_imageCapture.data (), &QCameraImageCapture::readyForCaptureChanged, this , &VerifyThread::readyForCapture);
324- connect (m_imageCapture.data (), &QCameraImageCapture::imageCaptured, this , &VerifyThread::processCapturedImage);
325- connect (m_imageCapture.data (), QOverload<int , QCameraImageCapture::Error, const QString &>::of (&QCameraImageCapture::error),
323+ connect (m_imageCapture.data (), &QImageCapture::readyForCaptureChanged, this , &VerifyThread::readyForCapture);
324+ connect (m_imageCapture.data (), &QImageCapture::imageCaptured, this , &VerifyThread::processCapturedImage);
325+ connect (m_imageCapture.data (), QOverload<int , QImageCapture::Error, const QString &>::of (&QImageCapture::errorOccurred),
326326 this , &VerifyThread::captureError);
327327 m_camera->start ();
328328}
329329
330- void VerifyThread::updateCameraState (QCamera::State state)
331- {
332- qDebug () << " updateCameraState" << state;
333- }
330+ // void VerifyThread::updateCameraState(QCamera::State state)
331+ // {
332+ // qDebug() << "updateCameraState" << state;
333+ // }
334334
335335void VerifyThread::readyForCapture (bool ready)
336336{
@@ -340,10 +340,12 @@ void VerifyThread::readyForCapture(bool ready)
340340 }
341341}
342342
343- void VerifyThread::captureError (int , QCameraImageCapture ::Error, const QString &errorString)
343+ void VerifyThread::captureError (int err, QImageCapture ::Error, const QString &errorString)
344344{
345- qDebug () << " read camera fail:" << errorString;
346- Q_EMIT processStatus (m_actionId, FaceEnrollException);
345+ if (err > 0 ) {
346+ qDebug () << " read camera fail:" << errorString;
347+ Q_EMIT processStatus (m_actionId, FaceEnrollException);
348+ }
347349 return ;
348350}
349351
@@ -466,11 +468,11 @@ void VerifyThread::Stop()
466468{
467469 qDebug () << " VerifyThread::Stop thread:" << QThread::currentThreadId ();
468470
469- m_imageCapture->cancelCapture ();
471+ // m_imageCapture->cancelCapture();
470472 // 当关闭相机后, 会取消图片的抓取, 此时不需要去处理抓取的图片
471- disconnect (m_imageCapture.data (), &QCameraImageCapture ::imageCaptured, this , &VerifyThread::processCapturedImage);
473+ disconnect (m_imageCapture.data (), &QImageCapture ::imageCaptured, this , &VerifyThread::processCapturedImage);
472474 m_camera->stop ();
473- m_camera->unload ();
475+ // m_camera->unload();
474476 for (int i = 0 ; i < m_charaDatas.size (); i++) {
475477 if (m_charaDatas[i] != nullptr ) {
476478 free (m_charaDatas[i]);
0 commit comments