File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change @@ -320,24 +320,29 @@ void LibCameraWorker::captureImage() {
320320}
321321
322322void LibCameraWorker::processCaptureComplete (Request *request) {
323+ qDebug () << " [DEBUG] processCaptureComplete called, status:" << request->status ();
324+
323325 if (request->status () == Request::RequestCancelled) {
324- resumeViewfinder ();
326+ // Defer resumeViewfinder to run outside this callback
327+ QMetaObject::invokeMethod (this , " resumeViewfinder" , Qt::QueuedConnection);
325328 return ;
326329 }
327330
328331 // Convert buffer to image
329332 if (!request->buffers ().empty ()) {
330333 QImage img = convertBufferToImage (request->buffers ());
331334 if (!img.isNull ()) {
332- emit imageCaptured (img);
335+ Q_EMIT imageCaptured (img);
333336 } else {
334- emit errorOccurred (" libcamera: failed to convert capture buffer" );
337+ Q_EMIT errorOccurred (" libcamera: failed to convert capture buffer" );
335338 }
336339 } else {
337- emit errorOccurred (" libcamera: capture request has no buffers" );
340+ Q_EMIT errorOccurred (" libcamera: capture request has no buffers" );
338341 }
339342
340- resumeViewfinder ();
343+ // Defer resumeViewfinder to run outside this callback
344+ // This is critical - we cannot call mCamera->stop() from within the requestCompleted callback
345+ QMetaObject::invokeMethod (this , " resumeViewfinder" , Qt::QueuedConnection);
341346}
342347
343348void LibCameraWorker::resumeViewfinder () {
Original file line number Diff line number Diff line change @@ -33,6 +33,7 @@ public slots:
3333 void startCamera (const QString &cameraId);
3434 void stopCamera ();
3535 void captureImage ();
36+ void resumeViewfinder ();
3637 void queueViewfinderRequest ();
3738
3839signals:
@@ -45,7 +46,7 @@ public slots:
4546 bool configureCamera (libcamera::StreamRole role);
4647 void processCompletedRequest (libcamera::Request *request);
4748 void processCaptureComplete (libcamera::Request *request);
48- void resumeViewfinder ();
49+
4950 QImage convertBufferToImage (
5051 const std::map<const libcamera::Stream *, libcamera::FrameBuffer *> &buffers);
5152
You can’t perform that action at this time.
0 commit comments