Skip to content
Snippets Groups Projects
Commit d3a84884 authored by Silas Della Contrada's avatar Silas Della Contrada
Browse files
parents 38c06001 70a50045
No related branches found
No related tags found
No related merge requests found
[submodule "QtAV"]
path = QtAV
url = https://github.com/wang-bin/QtAV
......@@ -3,13 +3,12 @@
<component name="CMakeWorkspace" PROJECT_DIR="$PROJECT_DIR$" />
<component name="CidrRootsConfiguration">
<sourceRoots>
<file path="$PROJECT_DIR$/VanadiumCast" />
<file path="$PROJECT_DIR$/backend" />
<file path="$PROJECT_DIR$/src/API" />
<file path="$PROJECT_DIR$/src/GUI" />
<file path="$PROJECT_DIR$/src/MediaProcessing" />
<file path="$PROJECT_DIR$/src/Networking" />
</sourceRoots>
</component>
<component name="ProjectPlainTextFileTypeManager">
<file url="file://$PROJECT_DIR$/cmake-build-debug/src/CMakeFiles/VanadiumCastLib-obj.dir/GUI/VideoGui.cpp.obj" />
</component>
</project>
\ No newline at end of file
cmake_minimum_required(VERSION 3.17)
project(VanadiumCast LANGUAGES CXX)
set(CMAKE_INCLUDE_CURRENT_DIR ON)
if (!MSVC)
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "/usr/share/cmake-3.18/Modules")
else ()
include_directories("E:\\QtAV\\src\\compat\\msvc")
endif ()
set(CMAKE_AUTOUIC ON)
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTORCC ON)
set(CMAKE_CXX_STANDARD 20)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
add_subdirectory(src)
add_subdirectory(test)
This diff is collapsed.
LICENSE 0 → 100644
MIT License
Copyright (c) 2021 Silas Della Contrada
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
# Created by and for Qt Creator This file was created for editing the project sources only.
# You may attempt to use it for building too, by modifying this file here.
#TARGET = VanadiumCast
QT = core gui widgets quick quickcontrols2 av avwidgets network concurrent multimedia
HEADERS = \
$$PWD/src/backend/API/API.h \
$$PWD/src/backend/API/NetworkAPI.h \
$$PWD/src/backend/API/SinkHandleWidget.h \
$$PWD/src/backend/GUI/VideoGui.h \
$$PWD/src/backend/GUI/VideoGuiLauncher.h \
$$PWD/src/backend/GUI/WindowCloseEventFilter.h \
$$PWD/src/backend/MediaProcessing/CachedLocalStream.h \
$$PWD/src/backend/MediaProcessing/EncodingProfile.h \
$$PWD/src/backend/MediaProcessing/FFMPEGTranscoder.h \
$$PWD/src/backend/MediaProcessing/Input.h \
$$PWD/src/backend/MediaProcessing/InputFile.h \
$$PWD/src/backend/MediaProcessing/NetworkInput.h \
$$PWD/src/backend/MediaProcessing/PlayerStateSlots.h \
$$PWD/src/backend/MediaProcessing/VideoTranscoder.h \
$$PWD/src/backend/Networking/CachedStream.h \
$$PWD/src/backend/Networking/Device.h \
$$PWD/src/backend/Networking/DeviceDirectory.h \
$$PWD/src/backend/Networking/DeviceScan.h \
$$PWD/src/backend/Networking/NetworkDevice.h \
$$PWD/src/backend/Networking/NetworkDeviceDirectory.h \
$$PWD/src/backend/Networking/NetworkDeviceScanner.h \
$$PWD/src/backend/Networking/NetworkSinkHandler.h \
$$PWD/src/backend/Networking/NetworkSinkTcpServer.h \
$$PWD/src/backend/Networking/SinkHandler.h \
$$PWD/src/backend/Networking/Streaming.h \
$$PWD/src/backend/Networking/StreamThread.h \
$$PWD/src/backend/Commands.h \
$$PWD/src/backend/util.h \
# $$PWD/test/MediaProcessing/CachedLocalStreamTest.h \
# $$PWD/test/Networking/CachedStreamTest.h
SOURCES = \
$$PWD/res/gui/fragments/PageDevices.qml \
$$PWD/res/gui/fragments/PageMedia.qml \
$$PWD/res/gui/fragments/PageStreaming.qml \
$$PWD/res/gui/icons/pause.svg \
$$PWD/res/gui/icons/play.svg \
$$PWD/res/gui/model/DeviceListModel.qml \
$$PWD/res/gui/main.qml \
$$PWD/res/sound/incoming.wav \
$$PWD/res/qml.qrc \
$$PWD/res/qtquickcontrols2.conf \
$$PWD/src/backend/API/NetworkAPI.cpp \
$$PWD/src/backend/GUI/VideoGui.cpp \
$$PWD/src/backend/GUI/VideoGui.ui \
$$PWD/src/backend/GUI/VideoGuiLauncher.cpp \
$$PWD/src/backend/GUI/WindowCloseEventFilter.cpp \
$$PWD/src/backend/MediaProcessing/CachedLocalStream.cpp \
$$PWD/src/backend/MediaProcessing/FFMPEGTranscoder.cpp \
$$PWD/src/backend/MediaProcessing/InputFile.cpp \
$$PWD/src/backend/MediaProcessing/NetworkInput.cpp \
$$PWD/src/backend/MediaProcessing/VideoTranscoder.cpp \
$$PWD/src/backend/Networking/CachedStream.cpp \
$$PWD/src/backend/Networking/NetworkDevice.cpp \
$$PWD/src/backend/Networking/NetworkDeviceDirectory.cpp \
$$PWD/src/backend/Networking/NetworkDeviceScanner.cpp \
$$PWD/src/backend/Networking/NetworkSinkHandler.cpp \
$$PWD/src/backend/Networking/NetworkSinkTcpServer.cpp \
$$PWD/src/backend/Networking/StreamThread.cpp \
# $$PWD/src/main.cpp \
$$PWD/src/backend/util.cpp \
# $$PWD/test/MediaProcessing/CachedLocalStreamTest.cpp \
# $$PWD/test/Networking/CachedStreamTest.cpp \
# $$PWD/test/main.cpp
INCLUDEPATH = \
$$PWD/src/backend \
$$PWD/src/backend/API \
$$PWD/src/backend/GUI \
$$PWD/src/backend/MediaProcessing \
$$PWD/src/backend/Networking \
# $$PWD/test/MediaProcessing \
# $$PWD/test/Networking
#DEFINES =
SUBDIRS += \
QMake.old.pro
set(PROJECT_NAME VanadiumCast)
################################################################################
# Source groups
################################################################################
set(Generated_Files
# "debug/moc_predefs.h.cbt"
# "debug/qmlcache_loader.cpp"
# "debug/qrc_res_resources_qmlcache.cpp"
# "debug/res_gui_fragments_PageDevices_qml.cpp"
# "debug/res_gui_fragments_PageMedia_qml.cpp"
# "debug/res_gui_fragments_PageStreaming_qml.cpp"
# "debug/res_gui_main_qml.cpp"
# "debug/res_gui_model_DeviceListModel_qml.cpp"
# "release/moc_predefs.h.cbt"
# "release/qmlcache_loader.cpp"
# "release/qrc_res_resources_qmlcache.cpp"
# "release/res_gui_fragments_PageDevices_qml.cpp"
# "release/res_gui_fragments_PageMedia_qml.cpp"
# "release/res_gui_fragments_PageStreaming_qml.cpp"
# "release/res_gui_main_qml.cpp"
# "release/res_gui_model_DeviceListModel_qml.cpp"
)
source_group("Generated Files" FILES ${Generated_Files})
set(Resource_Files
"res/gui/fragments/PageDevices.qml"
"res/gui/fragments/PageMedia.qml"
"res/gui/fragments/PageStreaming.qml"
"res/gui/icons/pause.svg"
"res/gui/icons/play.svg"
"res/gui/main.qml"
"res/gui/model/DeviceListModel.qml"
"res/qtquickcontrols2.conf"
"res/sound/incoming.wav"
"res_resources_qmlcache.qrc"
)
source_group("Resource Files" FILES ${Resource_Files})
set(Source_Files
"src/main.cpp"
)
source_group("Source Files" FILES ${Source_Files})
set(qmlcachengen_loader_res/resources.qrc
"res/resources.qrc"
)
source_group("qmlcachengen_loader res/resources.qrc" FILES ${qmlcachengen_loader_res/resources.qrc})
set(ALL_FILES
${Generated_Files}
${Resource_Files}
${Source_Files}
${qmlcachengen_loader_res/resources.qrc}
)
################################################################################
# Target
################################################################################
add_executable(${PROJECT_NAME} ${ALL_FILES})
use_props(${PROJECT_NAME} "${CMAKE_CONFIGURATION_TYPES}" "${DEFAULT_CXX_PROPS}")
set(ROOT_NAMESPACE VanadiumCast)
set_target_properties(${PROJECT_NAME} PROPERTIES
VS_GLOBAL_KEYWORD "Qt4VSv1.0"
)
################################################################################
# Target name
################################################################################
set_target_properties(${PROJECT_NAME} PROPERTIES
TARGET_NAME_DEBUG "VanadiumCast"
TARGET_NAME_RELEASE "VanadiumCast"
)
################################################################################
# Output directory
################################################################################
set_target_properties(${PROJECT_NAME} PROPERTIES
OUTPUT_DIRECTORY_DEBUG "${CMAKE_CURRENT_SOURCE_DIR}/debug"
OUTPUT_DIRECTORY_RELEASE "${CMAKE_CURRENT_SOURCE_DIR}/release"
)
################################################################################
# MSVC runtime library
################################################################################
get_property(MSVC_RUNTIME_LIBRARY_DEFAULT TARGET ${PROJECT_NAME} PROPERTY MSVC_RUNTIME_LIBRARY)
string(CONCAT "MSVC_RUNTIME_LIBRARY_STR"
$<$<CONFIG:Debug>:
MultiThreadedDebugDLL
>
$<$<CONFIG:Release>:
MultiThreadedDLL
>
$<$<NOT:$<OR:$<CONFIG:Debug>,$<CONFIG:Release>>>:${MSVC_RUNTIME_LIBRARY_DEFAULT}>
)
set_target_properties(${PROJECT_NAME} PROPERTIES MSVC_RUNTIME_LIBRARY ${MSVC_RUNTIME_LIBRARY_STR})
################################################################################
# Include directories
################################################################################
target_include_directories(${PROJECT_NAME} PRIVATE
"$<$<CONFIG:Debug>:"
"${CMAKE_CURRENT_SOURCE_DIR}/debug"
">"
"$<$<CONFIG:Release>:"
"${CMAKE_CURRENT_SOURCE_DIR}/release"
">"
"${CMAKE_CURRENT_SOURCE_DIR}/.;"
"${CMAKE_CURRENT_SOURCE_DIR}/../backend/src;"
"${CMAKE_CURRENT_SOURCE_DIR}/../../../Qt/5.15.2/msvc2019_64/include;"
"${CMAKE_CURRENT_SOURCE_DIR}/../../../Qt/5.15.2/msvc2019_64/include/QtQuickControls2;"
"${CMAKE_CURRENT_SOURCE_DIR}/../../../Qt/5.15.2/msvc2019_64/include/QtQuick;"
"${CMAKE_CURRENT_SOURCE_DIR}/../../../Qt/5.15.2/msvc2019_64/include/QtOpenGL;"
"${CMAKE_CURRENT_SOURCE_DIR}/../../../Qt/5.15.2/msvc2019_64/include/QtWidgets;"
"${CMAKE_CURRENT_SOURCE_DIR}/../../../Qt/5.15.2/msvc2019_64/include/QtMultimedia;"
"${CMAKE_CURRENT_SOURCE_DIR}/../../../Qt/5.15.2/msvc2019_64/include/QtGui;"
"${CMAKE_CURRENT_SOURCE_DIR}/../../../Qt/5.15.2/msvc2019_64/include/QtANGLE;"
"${CMAKE_CURRENT_SOURCE_DIR}/../../../Qt/5.15.2/msvc2019_64/include/QtQmlModels;"
"${CMAKE_CURRENT_SOURCE_DIR}/../../../Qt/5.15.2/msvc2019_64/include/QtQml;"
"${CMAKE_CURRENT_SOURCE_DIR}/../../../Qt/5.15.2/msvc2019_64/include/QtNetwork;"
"${CMAKE_CURRENT_SOURCE_DIR}/../../../Qt/5.15.2/msvc2019_64/include/QtConcurrent;"
"${CMAKE_CURRENT_SOURCE_DIR}/../../../Qt/5.15.2/msvc2019_64/include/QtCore;"
"${CMAKE_CURRENT_SOURCE_DIR}/../../../VulkanSDK/1.2.162.1/Include;"
"${CMAKE_CURRENT_SOURCE_DIR}/../../../Qt/5.15.2/msvc2019_64/mkspecs/win32-msvc"
)
################################################################################
# Compile definitions
################################################################################
target_compile_definitions(${PROJECT_NAME} PRIVATE
"$<$<CONFIG:Release>:"
"NDEBUG;"
"QT_NO_DEBUG"
">"
"_WINDOWS;"
"UNICODE;"
"_UNICODE;"
"WIN32;"
"_ENABLE_EXTENDED_ALIGNED_STORAGE;"
"WIN64;"
"QT_QUICKCONTROLS2_LIB;"
"QT_QUICK_LIB;"
"QT_OPENGL_LIB;"
"QT_WIDGETS_LIB;"
"QT_MULTIMEDIA_LIB;"
"QT_GUI_LIB;"
"QT_QMLMODELS_LIB;"
"QT_QML_LIB;"
"QT_NETWORK_LIB;"
"QT_CONCURRENT_LIB;"
"QT_CORE_LIB"
)
################################################################################
# Compile and link options
################################################################################
if(MSVC)
target_compile_options(${PROJECT_NAME} PRIVATE
$<$<CONFIG:Debug>:
/Od;
/Zi
>
$<$<CONFIG:Release>:
/O2;
/Oy;
${DEFAULT_CXX_DEBUG_INFORMATION_FORMAT}
>
/W3;
/wd4577;
/wd4467;
-Zc:rvalueCast;
-Zc:inline;
-Zc:strictStrings;
-Zc:throwingNew;
-Zc:referenceBinding;
-Zc:__cplusplus;
-w34100;
-w34189;
-w44996;
-w44456;
-w44457;
-w44458;
${DEFAULT_CXX_EXCEPTION_HANDLING};
/Zc:wchar_t
)
target_link_options(${PROJECT_NAME} PRIVATE
$<$<CONFIG:Debug>:
/DEBUG
>
$<$<CONFIG:Release>:
/OPT:REF;
/INCREMENTAL:NO
>
/NOLOGO;
/SUBSYSTEM:WINDOWS;
/NXCOMPAT;
/DYNAMICBASE;
"/MANIFESTDEPENDENCY:type='win32';
name='Microsoft.Windows.Common-Controls';
version='6.0.0.0';
publicKeyToken='6595b64144ccf1df';
language='*';
processorArchitecture='*'"
)
endif()
################################################################################
# Post build events
################################################################################
add_custom_command_if(
TARGET ${PROJECT_NAME}
POST_BUILD
COMMANDS
COMMAND $<CONFIG:Debug> xcopy /s /q /y /i F:\\Dev\\CLionProjects\\VanadiumCast\\VanadiumCast\\..\\backend\\debug\\backend.dll F:\\Dev\\CLionProjects\\VanadiumCast\\VanadiumCast\\debug\\
COMMAND $<CONFIG:Debug> if errorlevel 1 goto VCEnd
COMMAND $<CONFIG:Release> xcopy /s /q /y /i F:\\Dev\\CLionProjects\\VanadiumCast\\VanadiumCast\\..\\backend\\release\\backend.dll F:\\Dev\\CLionProjects\\VanadiumCast\\VanadiumCast\\release\\
COMMAND $<CONFIG:Release> if errorlevel 1 goto VCEnd
COMMENT "xcopy /s /q /y /i F:\\Dev\\CLionProjects\\VanadiumCast\\VanadiumCast\\..\\backend\\debug\\backend.dll F:\\Dev\\CLionProjects\\VanadiumCast\\VanadiumCast\\debug\\
"
)
################################################################################
# Dependencies
################################################################################
add_dependencies(${PROJECT_NAME}
backend
)
set(ADDITIONAL_LIBRARY_DEPENDENCIES
"$<$<CONFIG:Debug>:"
"F:\\Dev\\Qt\\5.15.2\\msvc2019_64\\lib\\Qt5AVd;"
"F:\\Dev\\Qt\\5.15.2\\msvc2019_64\\lib\\Qt5AVWidgetsd;"
"..\\backend\\debug\\backend;"
"F:\\Dev\\Qt\\5.15.2\\msvc2019_64\\lib\\Qt5QuickControls2d;"
"F:\\Dev\\Qt\\5.15.2\\msvc2019_64\\lib\\Qt5Quickd;"
"F:\\Dev\\Qt\\5.15.2\\msvc2019_64\\lib\\Qt5OpenGLd;"
"F:\\Dev\\Qt\\5.15.2\\msvc2019_64\\lib\\Qt5Widgetsd;"
"F:\\Dev\\Qt\\5.15.2\\msvc2019_64\\lib\\Qt5Multimediad;"
"F:\\Dev\\Qt\\5.15.2\\msvc2019_64\\lib\\Qt5Guid;"
"F:\\Dev\\Qt\\5.15.2\\msvc2019_64\\lib\\Qt5QmlModelsd;"
"F:\\Dev\\Qt\\5.15.2\\msvc2019_64\\lib\\Qt5Qmld;"
"F:\\Dev\\Qt\\5.15.2\\msvc2019_64\\lib\\Qt5Networkd;"
"F:\\Dev\\Qt\\5.15.2\\msvc2019_64\\lib\\Qt5Concurrentd;"
"F:\\Dev\\Qt\\5.15.2\\msvc2019_64\\lib\\Qt5Cored;"
"F:\\Dev\\Qt\\5.15.2\\msvc2019_64\\lib\\qtmaind"
">"
"$<$<CONFIG:Release>:"
"F:\\Dev\\Qt\\5.15.2\\msvc2019_64\\lib\\Qt5AV;"
"F:\\Dev\\Qt\\5.15.2\\msvc2019_64\\lib\\Qt5AVWidgets;"
"..\\backend\\release\\backend;"
"F:\\Dev\\Qt\\5.15.2\\msvc2019_64\\lib\\Qt5QuickControls2;"
"F:\\Dev\\Qt\\5.15.2\\msvc2019_64\\lib\\Qt5Quick;"
"F:\\Dev\\Qt\\5.15.2\\msvc2019_64\\lib\\Qt5OpenGL;"
"F:\\Dev\\Qt\\5.15.2\\msvc2019_64\\lib\\Qt5Widgets;"
"F:\\Dev\\Qt\\5.15.2\\msvc2019_64\\lib\\Qt5Multimedia;"
"F:\\Dev\\Qt\\5.15.2\\msvc2019_64\\lib\\Qt5Gui;"
"F:\\Dev\\Qt\\5.15.2\\msvc2019_64\\lib\\Qt5QmlModels;"
"F:\\Dev\\Qt\\5.15.2\\msvc2019_64\\lib\\Qt5Qml;"
"F:\\Dev\\Qt\\5.15.2\\msvc2019_64\\lib\\Qt5Network;"
"F:\\Dev\\Qt\\5.15.2\\msvc2019_64\\lib\\Qt5Concurrent;"
"F:\\Dev\\Qt\\5.15.2\\msvc2019_64\\lib\\Qt5Core;"
"F:\\Dev\\Qt\\5.15.2\\msvc2019_64\\lib\\qtmain"
">"
"OpenGL32;"
"shell32"
)
target_link_libraries(${PROJECT_NAME} PRIVATE "${ADDITIONAL_LIBRARY_DEPENDENCIES}")
target_link_directories(${PROJECT_NAME} PRIVATE
"F:/Dev/Qt/5.15.2/msvc2019_64/lib;"
"C:/openssl/lib;"
"C:/Utils/my_sql/mysql-5.7.25-winx64/lib;"
"C:/Utils/postgresql/pgsql/lib"
)
TEMPLATE += vcapp
QT += core quick quickcontrols2 gui widgets multimedia network concurrent opengl
CONFIG += qtquickcompiler
......
set(PROJECT_NAME backend)
################################################################################
# Source groups
################################################################################
set(Generated_Files
# "debug/moc_CachedLocalStream.cpp"
# "debug/moc_NetworkAPI.cpp"
# "debug/moc_NetworkDevice.cpp"
# "debug/moc_NetworkDeviceDirectory.cpp"
# "debug/moc_NetworkSinkHandler.cpp"
# "debug/moc_NetworkSinkTcpServer.cpp"
# "debug/moc_OGLUtil.cpp"
# "debug/moc_predefs.h.cbt"
# "debug/moc_ScreenRecorder.cpp"
# "debug/moc_StreamThread.cpp"
# "debug/moc_VideoGuiLauncher.cpp"
# "debug/moc_VideoTranscoder.cpp"
# "debug/moc_WindowCloseEventFilter.cpp"
# "release/moc_CachedLocalStream.cpp"
# "release/moc_NetworkAPI.cpp"
# "release/moc_NetworkDevice.cpp"
# "release/moc_NetworkDeviceDirectory.cpp"
# "release/moc_NetworkSinkHandler.cpp"
# "release/moc_NetworkSinkTcpServer.cpp"
# "release/moc_OGLUtil.cpp"
# "release/moc_predefs.h.cbt"
# "release/moc_ScreenRecorder.cpp"
# "release/moc_StreamThread.cpp"
# "release/moc_VideoGuiLauncher.cpp"
# "release/moc_VideoTranscoder.cpp"
# "release/moc_WindowCloseEventFilter.cpp"
)
source_group("Generated Files" FILES ${Generated_Files})
set(Header_Files
"src/API/NetworkAPI.h"
"src/Commands.h"
"src/global.h"
"src/GUI/VideoGuiLauncher.h"
"src/GUI/WindowCloseEventFilter.h"
"src/MediaProcessing/CachedLocalStream.h"
"src/MediaProcessing/InputFile.h"
"src/MediaProcessing/oglutil.h"
"src/MediaProcessing/ScreenRecorder.h"
"src/MediaProcessing/VideoTranscoder.h"
"src/Networking/NetworkDevice.h"
"src/Networking/NetworkDeviceDirectory.h"
"src/Networking/NetworkDeviceScanner.h"
"src/Networking/NetworkSinkHandler.h"
"src/Networking/NetworkSinkTcpServer.h"
"src/Networking/SinkHandler.h"
"src/Networking/StreamThread.h"
"src/util.h"
)
source_group("Header Files" FILES ${Header_Files})
set(Source_Files
"src/API/NetworkAPI.cpp"
"src/GUI/VideoGuiLauncher.cpp"
"src/GUI/WindowCloseEventFilter.cpp"
"src/MediaProcessing/CachedLocalStream.cpp"
"src/MediaProcessing/InputFile.cpp"
"src/MediaProcessing/oglutil.cpp"
"src/MediaProcessing/ScreenRecorder.cpp"
"src/MediaProcessing/VideoTranscoder.cpp"
"src/Networking/NetworkDevice.cpp"
"src/Networking/NetworkDeviceDirectory.cpp"
"src/Networking/NetworkDeviceScanner.cpp"
"src/Networking/NetworkSinkHandler.cpp"
"src/Networking/NetworkSinkTcpServer.cpp"
"src/Networking/StreamThread.cpp"
"src/util.cpp"
)
source_group("Source Files" FILES ${Source_Files})
set(ALL_FILES
${Generated_Files}
${Header_Files}
${Source_Files}
)
################################################################################
# Target
################################################################################
add_library(${PROJECT_NAME} SHARED ${ALL_FILES})
use_props(${PROJECT_NAME} "${CMAKE_CONFIGURATION_TYPES}" "${DEFAULT_CXX_PROPS}")
set(ROOT_NAMESPACE backend)
set_target_properties(${PROJECT_NAME} PROPERTIES
VS_GLOBAL_KEYWORD "Qt4VSv1.0"
)
################################################################################
# Target name
################################################################################
set_target_properties(${PROJECT_NAME} PROPERTIES
TARGET_NAME_DEBUG "backend"
TARGET_NAME_RELEASE "backend"
)
################################################################################
# Output directory
################################################################################
set_target_properties(${PROJECT_NAME} PROPERTIES
OUTPUT_DIRECTORY_DEBUG "${CMAKE_CURRENT_SOURCE_DIR}/debug"
OUTPUT_DIRECTORY_RELEASE "${CMAKE_CURRENT_SOURCE_DIR}/release"
)
################################################################################
# MSVC runtime library
################################################################################
get_property(MSVC_RUNTIME_LIBRARY_DEFAULT TARGET ${PROJECT_NAME} PROPERTY MSVC_RUNTIME_LIBRARY)
string(CONCAT "MSVC_RUNTIME_LIBRARY_STR"
$<$<CONFIG:Debug>:
MultiThreadedDebugDLL
>
$<$<CONFIG:Release>:
MultiThreadedDLL
>
$<$<NOT:$<OR:$<CONFIG:Debug>,$<CONFIG:Release>>>:${MSVC_RUNTIME_LIBRARY_DEFAULT}>
)
set_target_properties(${PROJECT_NAME} PROPERTIES MSVC_RUNTIME_LIBRARY ${MSVC_RUNTIME_LIBRARY_STR})
################################################################################
# Include directories
################################################################################
target_include_directories(${PROJECT_NAME} PRIVATE
"$<$<CONFIG:Debug>:"
"${CMAKE_CURRENT_SOURCE_DIR}/debug"
">"
"$<$<CONFIG:Release>:"
"${CMAKE_CURRENT_SOURCE_DIR}/release"
">"
"${CMAKE_CURRENT_SOURCE_DIR}/.;"
"${CMAKE_CURRENT_SOURCE_DIR}/src;"
"${CMAKE_CURRENT_SOURCE_DIR}/../../../Qt/5.15.2/msvc2019_64/include;"
"${CMAKE_CURRENT_SOURCE_DIR}/../../../Qt/5.15.2/msvc2019_64/include/QtWidgets;"
"${CMAKE_CURRENT_SOURCE_DIR}/../../../Qt/5.15.2/msvc2019_64/include/QtMultimedia;"
"${CMAKE_CURRENT_SOURCE_DIR}/../../../Qt/5.15.2/msvc2019_64/include/QtQuick;"
"${CMAKE_CURRENT_SOURCE_DIR}/../../../Qt/5.15.2/msvc2019_64/include/QtGui;"
"${CMAKE_CURRENT_SOURCE_DIR}/../../../Qt/5.15.2/msvc2019_64/include/QtANGLE;"
"${CMAKE_CURRENT_SOURCE_DIR}/../../../Qt/5.15.2/msvc2019_64/include/QtQmlModels;"
"${CMAKE_CURRENT_SOURCE_DIR}/../../../Qt/5.15.2/msvc2019_64/include/QtQml;"
"${CMAKE_CURRENT_SOURCE_DIR}/../../../Qt/5.15.2/msvc2019_64/include/QtNetwork;"
"${CMAKE_CURRENT_SOURCE_DIR}/../../../Qt/5.15.2/msvc2019_64/include/QtConcurrent;"
"${CMAKE_CURRENT_SOURCE_DIR}/../../../Qt/5.15.2/msvc2019_64/include/QtCore;"
"${CMAKE_CURRENT_SOURCE_DIR}/../../../VulkanSDK/1.2.162.1/Include;"
"${CMAKE_CURRENT_SOURCE_DIR}/../../../Qt/5.15.2/msvc2019_64/mkspecs/win32-msvc"
)
################################################################################
# Compile definitions
################################################################################
target_compile_definitions(${PROJECT_NAME} PRIVATE
"$<$<CONFIG:Release>:"
"NDEBUG;"
"QT_NO_DEBUG"
">"
"_WINDOWS;"
"UNICODE;"
"_UNICODE;"
"WIN32;"
"_ENABLE_EXTENDED_ALIGNED_STORAGE;"
"WIN64;"
"VCL_LIB;"
"QT_WIDGETS_LIB;"
"QT_MULTIMEDIA_LIB;"
"QT_QUICK_LIB;"
"QT_GUI_LIB;"
"QT_QMLMODELS_LIB;"
"QT_QML_LIB;"
"QT_NETWORK_LIB;"
"QT_CONCURRENT_LIB;"
"QT_CORE_LIB"
)
################################################################################
# Compile and link options
################################################################################
if(MSVC)
target_compile_options(${PROJECT_NAME} PRIVATE
$<$<CONFIG:Debug>:
/Od;
/Zi
>
$<$<CONFIG:Release>:
/O2;
/Oy;
${DEFAULT_CXX_DEBUG_INFORMATION_FORMAT}
>
/W3;
/wd4577;
/wd4467;
-Zc:rvalueCast;
-Zc:inline;
-Zc:strictStrings;
-Zc:throwingNew;
-Zc:referenceBinding;
-Zc:__cplusplus;
-w34100;
-w34189;
-w44996;
-w44456;
-w44457;
-w44458;
${DEFAULT_CXX_EXCEPTION_HANDLING};
/Zc:wchar_t
)
target_link_options(${PROJECT_NAME} PRIVATE
$<$<CONFIG:Debug>:
/DEBUG
>
$<$<CONFIG:Release>:
/OPT:REF;
/INCREMENTAL:NO
>
/NOLOGO;
/SUBSYSTEM:WINDOWS;
/NXCOMPAT;
/DYNAMICBASE
)
endif()
################################################################################
# Post build events
################################################################################
add_custom_command_if(
TARGET ${PROJECT_NAME}
POST_BUILD
COMMANDS
COMMAND $<CONFIG:Debug> xcopy /s /q /y /i F:\\Dev\\CLionProjects\\VanadiumCast\\backend\\debug\\backend.dll F:\\Dev\\CLionProjects\\VanadiumCast\\backend\\..\\VanadiumCast\\debug\\
COMMAND $<CONFIG:Debug> if errorlevel 1 goto VCEnd
COMMAND $<CONFIG:Release> xcopy /s /q /y /i F:\\Dev\\CLionProjects\\VanadiumCast\\backend\\release\\backend.dll F:\\Dev\\CLionProjects\\VanadiumCast\\backend\\..\\VanadiumCast\\release\\
COMMAND $<CONFIG:Release> if errorlevel 1 goto VCEnd
COMMENT "xcopy /s /q /y /i F:\\Dev\\CLionProjects\\VanadiumCast\\backend\\debug\\backend.dll F:\\Dev\\CLionProjects\\VanadiumCast\\backend\\..\\VanadiumCast\\debug\\
"
)
################################################################################
# Dependencies
################################################################################
set(ADDITIONAL_LIBRARY_DEPENDENCIES
"$<$<CONFIG:Debug>:"
"F:\\Dev\\Qt\\5.15.2\\msvc2019_64\\lib\\Qt5AVd;"
"F:\\Dev\\Qt\\5.15.2\\msvc2019_64\\lib\\Qt5AVWidgetsd;"
"F:\\Dev\\Qt\\5.15.2\\msvc2019_64\\lib\\Qt5Widgetsd;"
"F:\\Dev\\Qt\\5.15.2\\msvc2019_64\\lib\\Qt5Multimediad;"
"F:\\Dev\\Qt\\5.15.2\\msvc2019_64\\lib\\Qt5Quickd;"
"F:\\Dev\\Qt\\5.15.2\\msvc2019_64\\lib\\Qt5Guid;"
"F:\\Dev\\Qt\\5.15.2\\msvc2019_64\\lib\\Qt5QmlModelsd;"
"F:\\Dev\\Qt\\5.15.2\\msvc2019_64\\lib\\Qt5Qmld;"
"F:\\Dev\\Qt\\5.15.2\\msvc2019_64\\lib\\Qt5Networkd;"
"F:\\Dev\\Qt\\5.15.2\\msvc2019_64\\lib\\Qt5Concurrentd;"
"F:\\Dev\\Qt\\5.15.2\\msvc2019_64\\lib\\Qt5Cored"
">"
"$<$<CONFIG:Release>:"
"F:\\Dev\\Qt\\5.15.2\\msvc2019_64\\lib\\Qt5AV;"
"F:\\Dev\\Qt\\5.15.2\\msvc2019_64\\lib\\Qt5AVWidgets;"
"F:\\Dev\\Qt\\5.15.2\\msvc2019_64\\lib\\Qt5Widgets;"
"F:\\Dev\\Qt\\5.15.2\\msvc2019_64\\lib\\Qt5Multimedia;"
"F:\\Dev\\Qt\\5.15.2\\msvc2019_64\\lib\\Qt5Quick;"
"F:\\Dev\\Qt\\5.15.2\\msvc2019_64\\lib\\Qt5Gui;"
"F:\\Dev\\Qt\\5.15.2\\msvc2019_64\\lib\\Qt5QmlModels;"
"F:\\Dev\\Qt\\5.15.2\\msvc2019_64\\lib\\Qt5Qml;"
"F:\\Dev\\Qt\\5.15.2\\msvc2019_64\\lib\\Qt5Network;"
"F:\\Dev\\Qt\\5.15.2\\msvc2019_64\\lib\\Qt5Concurrent;"
"F:\\Dev\\Qt\\5.15.2\\msvc2019_64\\lib\\Qt5Core"
">"
"OpenGL32;"
"d3d9"
)
target_link_libraries(${PROJECT_NAME} PUBLIC "${ADDITIONAL_LIBRARY_DEPENDENCIES}")
target_link_directories(${PROJECT_NAME} PUBLIC
"F:/Dev/Qt/5.15.2/msvc2019_64/lib"
)
TEMPLATE = lib
TEMPLATE = vclib
QT += core gui widgets network multimedia quick concurrent
......@@ -34,14 +34,14 @@ win32 {
message("release")
message("$$QT.core.libs")
# LIBS += -LE:/Dev/QtAV/build-release/lib_win_x86_64 -lQtAV1 -lQtAVWidgets1
LIBS += -L$$QT.core.libs -lQt5AV -lQt5AVWidgets
LIBS += -L$$QT.core.libs -lQt5AV -lQt5AVWidgets -ld3d9
copyToDestDir($$OUT_PWD/release/backend.dll, $$OUT_PWD/../VanadiumCast/release/)
}
CONFIG(debug, debug|release) {
message("debug")
message("$$QT.core.libs")
# LIBS += -LE:/Dev/QtAV/build-debug/lib_win_x86_64 -lQtAVd1 -lQtAVWidgetsd1
LIBS += -L$$QT.core.libs -lQt5AVd -lQt5AVWidgetsd
LIBS += -L$$QT.core.libs -lQt5AVd -lQt5AVWidgetsd -ld3d9
copyToDestDir($$OUT_PWD/debug/backend.dll, $$OUT_PWD/../VanadiumCast/debug/)
}
}
......@@ -66,6 +66,7 @@ SOURCES += src/util.cpp \
src/MediaProcessing/CachedLocalStream.cpp \
src/MediaProcessing/InputFile.cpp \
src/MediaProcessing/OGLUtil.cpp \
src/MediaProcessing/ScreenRecorder.cpp \
src/MediaProcessing/VideoTranscoder.cpp \
src/Networking/NetworkDevice.cpp \
src/Networking/NetworkDeviceDirectory.cpp \
......@@ -82,6 +83,7 @@ HEADERS += src/util.h \
src/MediaProcessing/CachedLocalStream.h \
src/MediaProcessing/InputFile.h \
src/MediaProcessing/OGLUtil.h \
src/MediaProcessing/ScreenRecorder.h \
src/MediaProcessing/VideoTranscoder.h \
src/Networking/NetworkDevice.h \
src/Networking/NetworkDeviceDirectory.h \
......
......@@ -3,7 +3,8 @@
#include <QObject>
#include <QWidget>
#include "VideoGui.h"
#include <QtAV/QtAV>
#include <QtAVWidgets/QtAVWidgets>
#include "WindowCloseEventFilter.h"
#include "MediaProcessing/CachedLocalStream.h"
......
#include "ScreenRecorder.h"
#include <wrl/client.h>
#include <wrl/def.h>
#include <d3d9.h>
#define HRCHECK(__expr) {hr = __expr; if (FAILED(hr)) return hr;}
#define RELEASE(__p) {if(__p!=nullptr){__p->Release();__p=nullptr;}}
ScreenRecorder::ScreenRecorder(End *outputDevice, EncodingProfile &profile, QObject *parent): QObject(parent)
{
}
HRESULT dumpScreenBuffer(UINT adapter, UINT count, LPBYTE output) {
HRESULT hr = S_OK;
IDirect3D9 *d3d = nullptr;
IDirect3DDevice9 *device = nullptr;
IDirect3DSurface9 *surface = nullptr;
D3DPRESENT_PARAMETERS parameters{};
parameters.BackBufferFormat = D3DFMT_A8B8G8R8;
D3DDISPLAYMODE mode;
D3DLOCKED_RECT rc;
UINT pitch;
SYSTEMTIME st;
// init D3D and get screen size
d3d = Direct3DCreate9(D3D_SDK_VERSION);
HRCHECK(d3d->GetAdapterDisplayMode(adapter, &mode));
parameters.Windowed = TRUE;
parameters.BackBufferCount = 1;
parameters.BackBufferHeight = mode.Height;
parameters.BackBufferWidth = mode.Width;
parameters.SwapEffect = D3DSWAPEFFECT_DISCARD;
parameters.hDeviceWindow = NULL;
// create device & capture surface
HRCHECK(d3d->CreateDevice(adapter, D3DDEVTYPE_HAL, NULL, D3DCREATE_HARDWARE_VERTEXPROCESSING, &parameters, &device));
HRCHECK(device->CreateOffscreenPlainSurface(mode.Width, mode.Height, D3DFMT_A8R8G8B8, D3DPOOL_SYSTEMMEM, &surface, nullptr));
// compute the required buffer size
HRCHECK(surface->LockRect(&rc, NULL, 0));
pitch = rc.Pitch;
HRCHECK(surface->UnlockRect());
GetSystemTime(&st); // measure the time we spend doing <count> captures
wprintf(L"%i:%i:%i.%i\n", st.wHour, st.wMinute, st.wSecond, st.wMilliseconds);
// get the data
HRCHECK(device->GetFrontBufferData(0, surface));
// copy it into our buffers
HRCHECK(surface->LockRect(&rc, NULL, 0));
CopyMemory(output, rc.pBits, rc.Pitch * mode.Height);
HRCHECK(surface->UnlockRect());
GetSystemTime(&st);
wprintf(L"%i:%i:%i.%i\n", st.wHour, st.wMinute, st.wSecond, st.wMilliseconds);
RELEASE(surface);
RELEASE(device);
RELEASE(d3d);
QImage* img = new QImage(mode.Width, mode.Height, QImage::Format_ARGB32);
for (int y = 0; y < img->height(); y++)
{
memcpy(img->scanLine(y), (void*) output[y], img->bytesPerLine());
}
img->save("output.png", "PNG");
return hr;
}
#ifndef SCREENRECORDER_H
#define SCREENRECORDER_H
#include <QtCore>
#include "CachedLocalStream.h"
#include "VideoTranscoder.h"
#include <d3d9.h> // DirectX 9 header
#pragma comment(lib, "d3d9.lib") // link to DirectX 9 library
class ScreenRecorder : public QObject
{
Q_OBJECT
public:
ScreenRecorder(End *outputDevice, EncodingProfile &profile, QObject *parent = nullptr);
HRESULT dumpScreenBuffer(UINT adapter, UINT count, LPBYTE output);
};
#endif // SCREENRECORDER_H
cmake_minimum_required(VERSION 3.14)
set(CMAKE_INCLUDE_CURRENT_DIR ON)
set(CMAKE_AUTOUIC ON)
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTORCC ON)
set(CMAKE_CXX_STANDARD 20)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
if (MSVC)
include_directories("C:\\QtAV.new\\QtAV\\src\\compat\\msvc")
endif()
set(CMAKE_MODULE_PATH /usr/share/cmake-3.18/Modules /usr/share/cmake-3.19/Modules ${CMAKE_MODULE_PATH})
find_package(QtAV REQUIRED)
include_directories(${QTAV_INCLUDE_DIRS} ${QTAVWIDGETS_INCLUDE_DIRS})
find_package(Qt5 COMPONENTS Core Quick Widgets Network QuickControls2 Multimedia Concurrent REQUIRED)
find_package(QtAV)
add_library(VanadiumCastLib-obj OBJECT
API/NetworkAPI.cpp
GUI/VideoGui.cpp
GUI/VideoGuiLauncher.cpp
MediaProcessing/InputFile.cpp
MediaProcessing/NetworkInput.cpp
MediaProcessing/VideoTranscoder.cpp
Networking/NetworkDevice.cpp
Networking/StreamThread.cpp
Networking/NetworkSinkHandler.cpp
Networking/NetworkSinkTcpServer.cpp
Networking/NetworkDeviceScanner.cpp
Networking/NetworkDeviceDirectory.cpp
Commands.h
API/API.h
API/NetworkAPI.h
API/SinkHandleWidget.h
GUI/VideoGui.h
GUI/VideoGuiLauncher.h
MediaProcessing/Input.h
MediaProcessing/InputFile.h
MediaProcessing/NetworkInput.h
MediaProcessing/EncodingProfile.h
MediaProcessing/VideoTranscoder.h
MediaProcessing/PlayerStateSlots.h
Networking/Device.h
Networking/Streaming.h
Networking/DeviceScan.h
Networking/SinkHandler.h
Networking/NetworkDevice.h
Networking/DeviceDirectory.h
Networking/StreamThread.h
Networking/NetworkSinkHandler.h
Networking/NetworkSinkTcpServer.h
Networking/NetworkDeviceScanner.h
Networking/NetworkDeviceDirectory.h
Networking/CachedStream.cpp
Networking/CachedStream.h
MediaProcessing/CachedLocalStream.cpp
MediaProcessing/CachedLocalStream.h
util.cpp
util.h
MediaProcessing/FFMPEGTranscoder.cpp
MediaProcessing/FFMPEGTranscoder.h
GUI/WindowCloseEventFilter.cpp
GUI/WindowCloseEventFilter.h
VanadiumCastLib_EXPORTS.h)
add_executable(VanadiumCast
../res/qml.qrc
main.cpp)
add_library(VanadiumCastLib-shared SHARED
$<TARGET_OBJECTS:VanadiumCastLib-obj>
)
set_target_properties(VanadiumCastLib-shared
PROPERTIES
OUTPUT_NAME "VanadiumCastLib"
)
#add_library(VanadiumCastLib-static SHARED
# $<TARGET_OBJECTS:VanadiumCastLib-obj>
# )
#set_target_properties(VanadiumCastLib-static
# PROPERTIES
# OUTPUT_NAME "VanadiumCastLib"
# )
target_compile_definitions(VanadiumCastLib-obj
PRIVATE $<$<OR:$<CONFIG:Debug>,$<CONFIG:RelWithDebInfo>>:QT_QML_DEBUG>)
target_link_libraries(VanadiumCastLib-obj
PRIVATE Qt${QT_VERSION_MAJOR}::Core Qt${QT_VERSION_MAJOR}::Quick Qt${QT_VERSION_MAJOR}::Network Qt${QT_VERSION_MAJOR}::Multimedia Qt${QT_VERSION_MAJOR}::Widgets Qt${QT_VERSION_MAJOR}::Concurrent)
target_compile_definitions(VanadiumCastLib-shared
PRIVATE $<$<OR:$<CONFIG:Debug>,$<CONFIG:RelWithDebInfo>>:QT_QML_DEBUG>)
target_link_libraries(VanadiumCastLib-shared
PRIVATE Qt${QT_VERSION_MAJOR}::Core Qt${QT_VERSION_MAJOR}::Quick Qt${QT_VERSION_MAJOR}::Network Qt${QT_VERSION_MAJOR}::Multimedia Qt${QT_VERSION_MAJOR}::Widgets Qt${QT_VERSION_MAJOR}::Concurrent)
target_compile_definitions(VanadiumCast
PRIVATE $<$<OR:$<CONFIG:Debug>,$<CONFIG:RelWithDebInfo>>:QT_QML_DEBUG>)
target_link_libraries(VanadiumCast
PRIVATE Qt${QT_VERSION_MAJOR}::Core Qt${QT_VERSION_MAJOR}::Quick Qt${QT_VERSION_MAJOR}::Network Qt${QT_VERSION_MAJOR}::Multimedia Qt${QT_VERSION_MAJOR}::Widgets Qt${QT_VERSION_MAJOR}::Concurrent)
if (MSVC)
target_link_libraries(VanadiumCastLib-obj PRIVATE QtAV1 QtAVWidgets1)
target_link_libraries(VanadiumCastLib-shared PRIVATE QtAV1 QtAVWidgets1)
target_link_libraries(VanadiumCast PRIVATE QtAVd1 QtAVWidgets1 QmlAV)
else ()
target_link_libraries(VanadiumCastLib-obj PRIVATE QtAV QtAVWidgets)
target_link_libraries(VanadiumCast PRIVATE QtAV QtAVWidgets)
endif ()
include(GenerateExportHeader)
GENERATE_EXPORT_HEADER(VanadiumCastLib-shared # generates the export header shared_EXPORTS.h automatically
BASE_NAME VanadiumCastLib
EXPORT_MACRO_NAME VanadiumCastLib_EXPORTS
EXPORT_FILE_NAME VanadiumCastLib_EXPORTS.h)
target_compile_definitions(VanadiumCastLib-shared PRIVATE VanadiumCastLib_shared_EXPORTS)
target_compile_definitions(VanadiumCastLib-obj PRIVATE VanadiumCastLib_shared_EXPORTS)
target_link_libraries(VanadiumCast PRIVATE VanadiumCastLib-shared)
target_link_libraries(VanadiumCastLib-obj PRIVATE avformat avcodec avdevice avfilter)
target_link_libraries(VanadiumCastLib-shared PRIVATE avformat avcodec avdevice avfilter)
cmake_minimum_required(VERSION 3.5)
project(VanadiumCastTest LANGUAGES CXX)
include_directories(../src)
find_package(Qt5 COMPONENTS Core Test Gui Widgets Concurrent Network REQUIRED)
if (MSVC)
include_directories(E:\\QtAV\\src\\QtAV E:\\QtAV\\widgets\\QtAVWidgets)
link_directories(E:\\QtAV\\x64\\Debug)
else ()
set(CMAKE_MODULE_PATH /usr/share/cmake-3.18/Modules /usr/share/cmake-3.19/Modules ${CMAKE_MODULE_PATH})
find_package(QtAV REQUIRED)
endif ()
set(CMAKE_INCLUDE_CURRENT_DIR ON)
set(CMAKE_AUTOUIC ON)
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTORCC ON)
set(CMAKE_CXX_STANDARD 20)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
enable_testing()
add_executable(VanadiumCastTest Networking/CachedStreamTest.h main.cpp Networking/CachedStreamTest.cpp MediaProcessing/CachedLocalStreamTest.cpp MediaProcessing/CachedLocalStreamTest.h)
add_test(NAME VanadiumCastTest COMMAND VanadiumCastTest)
target_link_libraries(VanadiumCastTest PRIVATE QtAV QtAVWidgets VanadiumCastLib Qt5::Gui Qt5::Test Qt5::Core Qt5::Widgets Qt5::Concurrent Qt5::Network)
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment