video: rewrite to use smart ptr
Refs #75280
Change-Id: I88318c097712a2d6948494a601cbf3faae3ead64
diff --git a/videowidget.cpp b/videowidget.cpp
index cef4915..bf3cd58 100644
--- a/videowidget.cpp
+++ b/videowidget.cpp
@@ -22,8 +22,6 @@
QWidget(parent)
, previewRenderer_(nullptr)
, renderer_(nullptr)
- , previewFrame_(nullptr)
- , distantFrame_(nullptr)
{
connect(Video::PreviewManager::instance(),
SIGNAL(previewStarted(Video::Renderer*)),
@@ -44,58 +42,53 @@
void
VideoWidget::previewStarted(Video::Renderer *renderer) {
- previewRenderer_ = renderer;
- connect(previewRenderer_, SIGNAL(frameUpdated()),
- this, SLOT(frameFromPreview()));
- connect(previewRenderer_, SIGNAL(stopped()),
- this, SLOT(previewStopped()));
+ if (this->isVisible()) {
+ previewRenderer_ = renderer;
+ connect(previewRenderer_, SIGNAL(frameUpdated()),
+ this, SLOT(frameFromPreview()));
+ connect(previewRenderer_, SIGNAL(stopped()),
+ this, SLOT(previewStopped()));
+ }
}
void
VideoWidget::previewStopped() {
- QMutexLocker {&lock_};
- if (previewFrame_) {
- delete previewFrame_;
- previewFrame_ = nullptr;
- }
disconnect(previewRenderer_, SIGNAL(frameUpdated()),
- this, SLOT(frameFromPreview()));
+ this, SLOT(frameFromPreview()));
disconnect(previewRenderer_, SIGNAL(stopped()),
- this, SLOT(renderingStopped()));
+ this, SLOT(renderingStopped()));
previewRenderer_ = nullptr;
}
void
VideoWidget::frameFromPreview() {
- if (previewFrame_) {
- delete previewFrame_;
- previewFrame_ = nullptr;
- }
if (previewRenderer_ && previewRenderer_->isRendering()) {
- const QSize size(previewRenderer_->size());
- previewFrame_ = new QImage(
- (const uchar*)previewRenderer_->currentFrame().constData(),
- size.width(), size.height(), QImage::Format_RGBA8888);
+ currentPreviewFrame_ = previewRenderer_->currentSmartFrame();
update();
}
}
void
-VideoWidget::paintEvent(QPaintEvent* evt) {
+VideoWidget::paintEvent(QPaintEvent *evt) {
Q_UNUSED(evt)
- QMutexLocker {&lock_};
QPainter painter(this);
-
- if (distantFrame_ && renderer_ && renderer_->isRendering()) {
- auto scaledDistant = distantFrame_->scaled(size(), Qt::KeepAspectRatio);
+ if (renderer_ && currentDistantFrame_) {
+ const QSize imgSize(renderer_->size());
+ QImage distantFrame(currentDistantFrame_.get()->data(),
+ imgSize.width(), imgSize.height(), QImage::Format_RGBA8888);
+ auto scaledDistant = distantFrame.scaled(size(), Qt::KeepAspectRatio);
auto xDiff = (width() - scaledDistant.width()) / 2;
auto yDiff = (height() - scaledDistant.height()) /2;
painter.drawImage(QRect(xDiff,yDiff,scaledDistant.width(),scaledDistant.height()), scaledDistant);
}
- if (previewFrame_ && previewRenderer_ && previewRenderer_->isRendering()) {
+ if (previewRenderer_ && currentPreviewFrame_) {
+ const QSize imgSize(previewRenderer_->size());
+ QImage previewFrame(
+ currentPreviewFrame_.get()->data(),
+ imgSize.width(), imgSize.height(), QImage::Format_RGBA8888);
auto previewHeight = !renderer_ ? height() : height()/4;
auto previewWidth = !renderer_ ? width() : width()/4;
- auto scaledPreview = previewFrame_->scaled(previewWidth, previewHeight, Qt::KeepAspectRatio);
+ auto scaledPreview = previewFrame.scaled(previewWidth, previewHeight, Qt::KeepAspectRatio);
auto xDiff = (previewWidth - scaledPreview.width()) / 2;
auto yDiff = (previewHeight - scaledPreview.height()) / 2;
auto yPos = !renderer_ ? yDiff : height() - previewHeight - previewMargin_;
@@ -109,34 +102,24 @@
void
VideoWidget::callInitiated(Call* call, Video::Renderer *renderer) {
Q_UNUSED(call)
- renderer_ = renderer;
- connect(renderer_, SIGNAL(frameUpdated()), this, SLOT(frameFromDistant()));
- connect(renderer_, SIGNAL(stopped()),this, SLOT(renderingStopped()),
- Qt::ConnectionType::DirectConnection);
+ if (this->isVisible()) {
+ renderer_ = renderer;
+ connect(renderer_, SIGNAL(frameUpdated()), this, SLOT(frameFromDistant()));
+ connect(renderer_, SIGNAL(stopped()),this, SLOT(renderingStopped()),
+ Qt::ConnectionType::DirectConnection);
+ }
}
void
VideoWidget::frameFromDistant() {
- if (distantFrame_) {
- delete distantFrame_;
- distantFrame_ = nullptr;
- }
- if (renderer_) {
- const QSize size(renderer_->size());
- distantFrame_ = new QImage(
- (const uchar*) renderer_->currentFrame().constData(),
- size.width(), size.height(), QImage::Format_RGBA8888);
+ if (renderer_ && renderer_->isRendering()) {
+ currentDistantFrame_ = renderer_->currentSmartFrame();
update();
}
}
void
VideoWidget::renderingStopped() {
- QMutexLocker {&lock_};
- if (distantFrame_) {
- delete distantFrame_;
- distantFrame_ = nullptr;
- }
disconnect(renderer_, SIGNAL(frameUpdated()), this, SLOT(frameFromDistant()));
disconnect(renderer_, SIGNAL(stopped()),this, SLOT(renderingStopped()));
renderer_ = nullptr;