summaryrefslogtreecommitdiff
path: root/src/qcam/main_window.cpp
diff options
context:
space:
mode:
authorKieran Bingham <kieran.bingham@ideasonboard.com>2020-02-05 15:30:24 +0000
committerKieran Bingham <kieran.bingham@ideasonboard.com>2020-02-14 12:34:17 +0000
commit1bf51730760e19ed3f64d1d0a98a8bcd1e8671d0 (patch)
tree49d29c2ab5ccde485270478bdee638b4097b1f36 /src/qcam/main_window.cpp
parentea3a00bc33f950c794e8b6d8cf0201a24c0c3d0d (diff)
qcam: Tie FrameBufferAllocator to stream life
The FrameBufferAllocator must be deleted and reconstructed before performing any reconfiguration of the stream. Construct the allocator at startCapture, and destroy it during stopCapture so that we can successfully stop and restart the stream. Signed-off-by: Kieran Bingham <kieran.bingham@ideasonboard.com> Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Diffstat (limited to 'src/qcam/main_window.cpp')
-rw-r--r--src/qcam/main_window.cpp11
1 files changed, 7 insertions, 4 deletions
diff --git a/src/qcam/main_window.cpp b/src/qcam/main_window.cpp
index 70a3e61c..db14245d 100644
--- a/src/qcam/main_window.cpp
+++ b/src/qcam/main_window.cpp
@@ -36,10 +36,8 @@ MainWindow::MainWindow(CameraManager *cm, const OptionsParser::Options &options)
adjustSize();
ret = openCamera(cm);
- if (!ret) {
- allocator_ = FrameBufferAllocator::create(camera_);
+ if (!ret)
ret = startCapture();
- }
if (ret < 0)
QTimer::singleShot(0, QCoreApplication::instance(),
@@ -50,7 +48,6 @@ MainWindow::~MainWindow()
{
if (camera_) {
stopCapture();
- delete allocator_;
camera_->release();
camera_.reset();
}
@@ -171,6 +168,7 @@ int MainWindow::startCapture()
adjustSize();
+ allocator_ = FrameBufferAllocator::create(camera_);
ret = allocator_->allocate(stream);
if (ret < 0) {
std::cerr << "Failed to allocate capture buffers" << std::endl;
@@ -236,6 +234,9 @@ error:
}
mappedBuffers_.clear();
+ delete allocator_;
+ allocator_ = nullptr;
+
return ret;
}
@@ -255,6 +256,8 @@ void MainWindow::stopCapture()
}
mappedBuffers_.clear();
+ delete allocator_;
+
isCapturing_ = false;
config_.reset();