Feed publisher CPU frames and decouple FIN from capture teardown
This commit is contained in:
1 parent
5256dfa8c5
commit
eed07cb358
5 files changed
+106
-447
No files matched your search
@@ -62,7 +62,7 @@ void StreamGridWindow::createTile(Tile& tile) {
|
||||
tile.title->setToolTip(tile.name); layout->addWidget(tile.title);
|
||||
tile.status = new QLabel(text("Connecting…"), tile.widget); layout->addWidget(tile.status);
|
||||
#ifdef HAVE_STREAM_CAPTURE
|
||||
auto* preview = new QVideoWidget(tile.widget); preview->setAspectRatioMode(Qt::KeepAspectRatio);
|
||||
auto* preview = new VideoRenderWidget(tile.widget);
|
||||
tile.video = preview;
|
||||
#else
|
||||
tile.video = new QLabel(text("Video capture requires Qt Multimedia and FFmpeg"), tile.widget);
|
||||
@@ -82,7 +82,7 @@ void StreamGridWindow::createTile(Tile& tile) {
|
||||
for (auto* child : tile.video->findChildren<QWidget*>()) child->installEventFilter(this);
|
||||
}
|
||||
|
||||
/* QVariant хранит shared QVideoFrame; оба окна читают последний захваченный кадр без перекодирования. */
|
||||
/* QVariant хранит CPU QImage; очистка локального preview не затрагивает capture-процесс. */
|
||||
void StreamGridWindow::setLocalPreview(uint64_t group, const QVariant& frame) {
|
||||
if (m_closed || group != m_group) return;
|
||||
m_preview = frame;
|
||||
@@ -91,13 +91,13 @@ void StreamGridWindow::setLocalPreview(uint64_t group, const QVariant& frame) {
|
||||
|
||||
void StreamGridWindow::updatePreview(Tile& tile) {
|
||||
#ifdef HAVE_STREAM_CAPTURE
|
||||
auto frame = m_preview.value<QVideoFrame>();
|
||||
static_cast<QVideoWidget*>(tile.video)->videoSink()->setVideoFrame(frame);
|
||||
tile.status->setText(text(frame.isValid() ? "Live" : "Connecting…"));
|
||||
if (frame.isValid() && !tile.previewPresented)
|
||||
auto frame = m_preview.value<QImage>();
|
||||
static_cast<VideoRenderWidget*>(tile.video)->setFrame(frame);
|
||||
tile.status->setText(text(!frame.isNull() ? "Live" : "Connecting…"));
|
||||
if (!frame.isNull() && !tile.previewPresented)
|
||||
DEBUG_INFO(DEBUG_CATEGORY_STREAM, "desktop multiview first local frame source=%llx size=%dx%d decoder=0 audio=0",
|
||||
(unsigned long long)tile.source, frame.width(), frame.height());
|
||||
tile.previewPresented = frame.isValid();
|
||||
tile.previewPresented = !frame.isNull();
|
||||
#else
|
||||
Q_UNUSED(tile);
|
||||
#endif
|
||||
|
||||
Reference in new issue
Block a user