From 43a90ff23bfbb12a99ac4766e12f85c53c5869ee Mon Sep 17 00:00:00 2001 From: evgeny Date: Wed, 14 Oct 2026 21:44:16 +0200 Subject: [PATCH] Build shared live video library independently from stream publication --- tools/chatgui/CMakeLists.txt | 11 +++++++---- tools/chatgui/tests/test_stream_publish.cpp | 14 +++++++------- 2 files changed, 14 insertions(+), 11 deletions(-) diff --git a/tools/chatgui/CMakeLists.txt b/tools/chatgui/CMakeLists.txt index 7e53c364..c0f44edb 100644 --- a/tools/chatgui/CMakeLists.txt +++ b/tools/chatgui/CMakeLists.txt @@ -139,12 +139,15 @@ if(PkgConfig_FOUND) endif() # Общий sender остаётся в libutun; Qt захватывает видео, FFmpeg/Opus работают в publisher workers. -add_library(chatgui_stream_publish STATIC src/stream_video_encoder.cpp src/stream_publish_engine.cpp src/stream_publish_window.cpp) -target_link_libraries(chatgui_stream_publish PUBLIC ${QT_LIBS} utun PRIVATE ${FFMPEG_TARGET} ${FFMPEG_LIBRARIES}) -target_include_directories(chatgui_stream_publish PRIVATE ${FFMPEG_INCLUDE_DIRS} ${CMAKE_SOURCE_DIR}/../../lib/libopus/include) +add_library(chatgui_live_video STATIC src/live_video_encoder.cpp) +target_link_libraries(chatgui_live_video PUBLIC ${QT_LIBS} utun PRIVATE ${FFMPEG_TARGET} ${FFMPEG_LIBRARIES}) +target_include_directories(chatgui_live_video PRIVATE ${FFMPEG_INCLUDE_DIRS}) if(FFMPEG_FOUND) - target_compile_definitions(chatgui_stream_publish PRIVATE HAVE_FFMPEG) + target_compile_definitions(chatgui_live_video PRIVATE HAVE_FFMPEG) endif() +add_library(chatgui_stream_publish STATIC src/stream_publish_engine.cpp src/stream_publish_window.cpp) +target_link_libraries(chatgui_stream_publish PUBLIC chatgui_live_video) +target_include_directories(chatgui_stream_publish PRIVATE ${CMAKE_SOURCE_DIR}/../../lib/libopus/include) set(GUI_CAPTURE_ENABLED 0) if(QT_PACKAGE STREQUAL "Qt6" AND FFMPEG_FOUND) set(GUI_BASE_QT6_FOUND ${Qt6_FOUND}) diff --git a/tools/chatgui/tests/test_stream_publish.cpp b/tools/chatgui/tests/test_stream_publish.cpp index 3f51b60d..a3f7dc89 100644 --- a/tools/chatgui/tests/test_stream_publish.cpp +++ b/tools/chatgui/tests/test_stream_publish.cpp @@ -8,7 +8,7 @@ #include #include #include -#include "../src/stream_video_encoder.h" +#include "../src/live_video_encoder.h" #include "../src/stream_publish_engine.h" #include "../src/stream_publish_window.h" #include "../src/sound_manager.h" @@ -77,10 +77,10 @@ class StreamPublishTest : public QObject { Q_UNUSED(codec); Q_UNUSED(width); Q_UNUSED(height); Q_UNUSED(pts); return QByteArray(4, '\0') + "opaque access unit"; #else - StreamVideoEncoder encoder; StreamVideoConfig config; config.width = width; config.height = height; config.codec = codec; + LiveVideoEncoder encoder; LiveVideoConfig config; config.width = width; config.height = height; config.codec = codec; if (!encoder.open(config)) return {}; QImage image(width, height, QImage::Format_RGB32); image.fill(QColor(45, 130, 220)); - QList output; + QList output; if (!encoder.encode(image, pts, true, output) || output.isEmpty() || !output.front().key) return {}; return output.front().data; #endif @@ -126,9 +126,9 @@ private slots: } void encoderRoundTrip_data() { QTest::addColumn("codec"); - auto codecs = StreamVideoEncoder::available(); + auto codecs = LiveVideoEncoder::available(); if (codecs.isEmpty()) QTest::newRow("unavailable") << 0; - for (int codec : codecs) QTest::newRow(qPrintable(StreamVideoEncoder::codecName(codec))) << codec; + for (int codec : codecs) QTest::newRow(qPrintable(LiveVideoEncoder::codecName(codec))) << codec; } void encoderRoundTrip() { #ifdef HAVE_FFMPEG @@ -174,10 +174,10 @@ private slots: } void liveSoftwareBitrateKeepsDecoder() { #ifdef HAVE_FFMPEG - StreamVideoEncoder encoder; StreamVideoConfig config; config.width = config.height = 16; + LiveVideoEncoder encoder; LiveVideoConfig config; config.width = config.height = 16; QVERIFY(encoder.open(config)); if (encoder.name() != "libx264") QSKIP("The available hardware encoder uses video-only replacement for bitrate changes"); - QImage image(16, 16, QImage::Format_RGB32); image.fill(Qt::red); QList output; + QImage image(16, 16, QImage::Format_RGB32); image.fill(Qt::red); QList output; QVERIFY(encoder.encode(image, 100000, true, output)); QVERIFY(!output.isEmpty() && output.front().key); const uint8_t *configuration, *frame; size_t configLength, frameLength; auto first = output.front().data;