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,7 +126,7 @@ void ErollThread::readyForCapture(bool ready)
128126 }
129127}
130128
131- void ErollThread::captureError (int , QCameraImageCapture ::Error, const QString &errorString)
129+ void ErollThread::captureError (int , QImageCapture ::Error, const QString &errorString)
132130{
133131 qDebug () << " read camera fail:" << errorString;
134132 Q_EMIT processStatus (m_actionId, FaceEnrollException);
@@ -297,40 +295,40 @@ void VerifyThread::run()
297295{
298296 qDebug () << " Verify run" ;
299297 m_camera.reset ();
300- auto cameras = QCameraInfo::availableCameras ();
301- for (const auto &obj : qAsConst (cameras)) {
298+ m_camera.reset ();
299+ auto cameras = QMediaDevices::videoInputs ();
300+ for (const QCameraDevice &obj : cameras) {
302301 m_camera.reset (new QCamera (obj));
303302 if (m_camera->isAvailable ())
304303 break ;
305304 }
305+
306306 if (m_camera.isNull ()) {
307307 qDebug () << " open camera fail" ;
308308 Q_EMIT processStatus (m_actionId, FaceEnrollException);
309309 return ;
310310 }
311311
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 ();
312+ m_captureSession.reset (new QMediaCaptureSession);
313+ m_captureSession->setCamera (m_camera.data ());
314+ m_imageCapture.reset (new QImageCapture);
315+ m_captureSession->setImageCapture (m_imageCapture.data ());
316+ QList<QSize> supportedResolutions = m_camera->cameraDevice ().photoResolutions ();
316317 if (supportedResolutions.contains (QSize (800 , 600 ))) {
317- auto settings = m_imageCapture->encodingSettings ();
318- settings.setResolution (QSize (800 , 600 ));
319- m_imageCapture->setEncodingSettings (settings);
318+ m_imageCapture->setResolution (QSize (800 , 600 ));
320319 }
321320
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),
321+ connect (m_imageCapture.data (), &QImageCapture::readyForCaptureChanged, this , &VerifyThread::readyForCapture);
322+ connect (m_imageCapture.data (), &QImageCapture::imageCaptured, this , &VerifyThread::processCapturedImage);
323+ connect (m_imageCapture.data (), QOverload<int , QImageCapture::Error, const QString &>::of (&QImageCapture::errorOccurred),
326324 this , &VerifyThread::captureError);
327325 m_camera->start ();
328326}
329327
330- void VerifyThread::updateCameraState (QCamera::State state)
331- {
332- qDebug () << " updateCameraState" << state;
333- }
328+ // void VerifyThread::updateCameraState(QCamera::State state)
329+ // {
330+ // qDebug() << "updateCameraState" << state;
331+ // }
334332
335333void VerifyThread::readyForCapture (bool ready)
336334{
@@ -340,7 +338,7 @@ void VerifyThread::readyForCapture(bool ready)
340338 }
341339}
342340
343- void VerifyThread::captureError (int , QCameraImageCapture ::Error, const QString &errorString)
341+ void VerifyThread::captureError (int , QImageCapture ::Error, const QString &errorString)
344342{
345343 qDebug () << " read camera fail:" << errorString;
346344 Q_EMIT processStatus (m_actionId, FaceEnrollException);
@@ -466,11 +464,11 @@ void VerifyThread::Stop()
466464{
467465 qDebug () << " VerifyThread::Stop thread:" << QThread::currentThreadId ();
468466
469- m_imageCapture->cancelCapture ();
467+ // m_imageCapture->cancelCapture();
470468 // 当关闭相机后, 会取消图片的抓取, 此时不需要去处理抓取的图片
471- disconnect (m_imageCapture.data (), &QCameraImageCapture ::imageCaptured, this , &VerifyThread::processCapturedImage);
469+ disconnect (m_imageCapture.data (), &QImageCapture ::imageCaptured, this , &VerifyThread::processCapturedImage);
472470 m_camera->stop ();
473- m_camera->unload ();
471+ // m_camera->unload();
474472 for (int i = 0 ; i < m_charaDatas.size (); i++) {
475473 if (m_charaDatas[i] != nullptr ) {
476474 free (m_charaDatas[i]);
0 commit comments