Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
60 changes: 56 additions & 4 deletions SerialPrograms/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -78,10 +78,28 @@ if(WIN32 AND QT_DEPLOY_FILES)
if(QT_CANDIDATE_DIR AND EXISTS "${QT_CANDIDATE_DIR}")
message(STATUS "Using preferred Qt directory for Qt${QT_MAJOR} ${PREFERRED_QT_VER}: ${QT_CANDIDATE_DIR}")
list(APPEND CMAKE_PREFIX_PATH "${QT_CANDIDATE_DIR}")
find_package(Qt${QT_MAJOR} ${PREFERRED_QT_VER} COMPONENTS Widgets SerialPort Multimedia MultimediaWidgets REQUIRED)
find_package(Qt${QT_MAJOR} ${PREFERRED_QT_VER} REQUIRED COMPONENTS
Widgets
SerialPort
Multimedia
MultimediaWidgets
OpenGLWidgets
Qml
Quick
QuickWidgets
)
else()
# Find all subdirectories in the Qt base directory
find_package(Qt${QT_MAJOR} COMPONENTS Widgets SerialPort Multimedia MultimediaWidgets REQUIRED)
find_package(Qt${QT_MAJOR} REQUIRED COMPONENTS
Widgets
SerialPort
Multimedia
MultimediaWidgets
OpenGLWidgets
Qml
Quick
QuickWidgets
)
file(GLOB QT_SUBDIRS LIST_DIRECTORIES true "${QT_BASE_DIR}/${QT_MAJOR}*")

# Filter and sort the directories to find the latest version
Expand Down Expand Up @@ -109,7 +127,16 @@ if(WIN32 AND QT_DEPLOY_FILES)
REQUIRED
)
else()
find_package(Qt${QT_MAJOR} COMPONENTS Widgets SerialPort Multimedia MultimediaWidgets REQUIRED)
find_package(Qt${QT_MAJOR} REQUIRED COMPONENTS
Widgets
SerialPort
Multimedia
MultimediaWidgets
OpenGLWidgets
Qml
Quick
QuickWidgets
)
endif()

# disable deprecated Qt APIs
Expand Down Expand Up @@ -188,7 +215,16 @@ endif()
# Function to apply common properties to both library and executable targets
function(apply_common_target_properties target_name)
set_target_properties(${target_name} PROPERTIES LINKER_LANGUAGE CXX)
target_link_libraries(${target_name} PRIVATE Qt${QT_MAJOR}::Widgets Qt${QT_MAJOR}::SerialPort Qt${QT_MAJOR}::Multimedia Qt${QT_MAJOR}::MultimediaWidgets)
target_link_libraries(${target_name} PRIVATE
Qt${QT_MAJOR}::Widgets
Qt${QT_MAJOR}::SerialPort
Qt${QT_MAJOR}::Multimedia
Qt${QT_MAJOR}::MultimediaWidgets
Qt${QT_MAJOR}::OpenGLWidgets
Qt${QT_MAJOR}::Qml
Qt${QT_MAJOR}::Quick
Qt${QT_MAJOR}::QuickWidgets
)
target_link_libraries(${target_name} PRIVATE Threads::Threads)

#add defines
Expand Down Expand Up @@ -652,8 +688,22 @@ if (WIN32)
endif()
else()
add_custom_target(run_windeployqt COMMENT "Skipping windeployqt (CI environment)")

endif()

# Copy QML library dependencies.
get_target_property(_qt_widgets_location Qt6::Widgets LOCATION)
get_filename_component(_qt_bin_dir "${_qt_widgets_location}" DIRECTORY)
set(_qt_qml_source_dir "${_qt_bin_dir}/../qml/QtMultimedia")
set(_local_qml_dest_dir "${WIN_DEPLOY_DIR}/qml/QtMultimedia")
add_custom_command(
TARGET SerialPrograms POST_BUILD
COMMAND ${CMAKE_COMMAND} -E echo "[Deploy-Local] Auto-copying QML Multimedia modules from ${_qt_qml_source_dir}"
COMMAND ${CMAKE_COMMAND} -E make_directory "${_local_qml_dest_dir}"
COMMAND ${CMAKE_COMMAND} -E copy_directory "${_qt_qml_source_dir}" "${_local_qml_dest_dir}"
COMMENT "Syncing local dev environment QML bindings..."
)

# Copy Discord SDK DLL
add_custom_command(
TARGET SerialPrograms POST_BUILD
Expand Down Expand Up @@ -725,6 +775,8 @@ if (WIN32)
)
endif() # end WIN32

set_target_properties(SerialPrograms PROPERTIES QT_QML_IMPORT_DEPENDENCIES "QtMultimedia")

if (QT_MAJOR GREATER_EQUAL 6)
qt_finalize_target(SerialPrograms)
endif()
Expand Down
8 changes: 8 additions & 0 deletions SerialPrograms/Source/CommonFramework/Main.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -88,13 +88,21 @@ FileLogger& global_file_logger(){


int run_program(int argc, char *argv[]){
// qputenv("QT_RHI_BACKEND", "opengl");

#if defined(__APPLE__)
Filesystem::set_startup_profile(argc, argv);
QApplication application(argc, argv);
#else
QApplication application(argc, argv);
#endif

{
QString bin_dir = QCoreApplication::applicationDirPath();
QString qml_import_path = QDir(bin_dir).filePath("qml");
qputenv("QML_IMPORT_PATH", qml_import_path.toLocal8Bit());
}

GlobalOutputRedirector redirect_stdout(std::cout, "stdout", Color());
GlobalOutputRedirector redirect_stderr(std::cerr, "stderr", COLOR_RED);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@
#include "CameraWidgetQt6.h"
#if QT_VERSION_MINOR >= 5
#include "CameraWidgetQt6.5.h"
#include "CameraWidgetQt6QML.h"
#endif
#endif

Expand Down Expand Up @@ -62,6 +63,12 @@ struct CameraBackends{
std::make_unique<CameraQt65QMediaCaptureSession::CameraBackend>()
);
#endif
#if QT_VERSION_MAJOR == 6
m_backends.emplace_back(
"qt6-QQuickWidget", "Qt6: QML QQuickWidget",
std::make_unique<CameraQt6QML::CameraBackend>()
);
#endif

size_t items = 0;
for (const auto& item : m_backends){
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,6 @@
#include <QCameraDevice>
#include <QMediaCaptureSession>
#include <QVideoFrame>
#include "Common/Cpp/Concurrency/Mutex.h"
#include "CommonFramework/Tools/StatAccumulator.h"
#include "CommonFramework/VideoPipeline/VideoSource.h"
#include "CommonFramework/VideoPipeline/CameraInfo.h"
Expand Down Expand Up @@ -101,8 +100,6 @@ class CameraVideoSource : public VideoSource{
VideoFormat m_format;
FramesPerSecond m_fps;

Mutex m_snapshot_lock;

std::unique_ptr<QCameraThread> m_camera;
std::unique_ptr<QVideoSink> m_video_sink;
std::unique_ptr<QMediaCaptureSession> m_capture;
Expand Down
Loading
Loading