diff options
author | Kieran Bingham <kieran.bingham@ideasonboard.com> | 2020-02-05 15:30:24 +0000 |
---|---|---|
committer | Kieran Bingham <kieran.bingham@ideasonboard.com> | 2020-02-14 12:34:17 +0000 |
commit | 1bf51730760e19ed3f64d1d0a98a8bcd1e8671d0 (patch) | |
tree | 49d29c2ab5ccde485270478bdee638b4097b1f36 | |
parent | ea3a00bc33f950c794e8b6d8cf0201a24c0c3d0d (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>
-rw-r--r-- | src/qcam/main_window.cpp | 11 |
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(); |