refactor: QtScrcpyCore static lib

This commit is contained in:
Barry 2022-06-06 17:03:52 +08:00
parent 1296158871
commit 6214fb6a87
12 changed files with 268 additions and 214 deletions

View file

@ -29,7 +29,7 @@ endif()
message(STATUS "[${PROJECT_NAME}] CPU_ARCH:${QC_CPU_ARCH}")
# CMake set
#set(CMAKE_INCLUDE_CURRENT_DIR ON)
set(CMAKE_INCLUDE_CURRENT_DIR ON)
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
@ -92,84 +92,6 @@ message(STATUS "[${PROJECT_NAME}] Qt version is: ${QT_VERSION_MAJOR}.${QT_VERSIO
# Sources
#
# adb
set(QC_ADB_SOURCES
QtScrcpyCore/src/adb/adbprocessimpl.h
QtScrcpyCore/src/adb/adbprocessimpl.cpp
QtScrcpyCore/src/adb/adbprocess.cpp
)
source_group(QtScrcpyCore/src/adb FILES ${QC_ADB_SOURCES})
# common
set(QC_COMMON_SOURCES
QtScrcpyCore/src/common/qscrcpyevent.h
)
source_group(QtScrcpyCore/src/common FILES ${QC_COMMON_SOURCES})
# include
set(QC_INCLUDE_SOURCES
QtScrcpyCore/include/QtScrcpyCore.h
QtScrcpyCore/include/QtScrcpyCoreDef.h
QtScrcpyCore/include/adbprocess.h
)
source_group(QtScrcpyCore/include FILES ${QC_INCLUDE_SOURCES})
# device
set(QC_DEVICE_SOURCES
QtScrcpyCore/src/device/device.h
QtScrcpyCore/src/device/device.cpp
QtScrcpyCore/src/device/android/input.h
QtScrcpyCore/src/device/android/keycodes.h
QtScrcpyCore/src/device/controller/controller.h
QtScrcpyCore/src/device/controller/controller.cpp
QtScrcpyCore/src/device/controller/bufferutil.h
QtScrcpyCore/src/device/controller/bufferutil.cpp
QtScrcpyCore/src/device/controller/inputconvert/inputconvertbase.h
QtScrcpyCore/src/device/controller/inputconvert/inputconvertbase.cpp
QtScrcpyCore/src/device/controller/inputconvert/inputconvertnormal.h
QtScrcpyCore/src/device/controller/inputconvert/inputconvertnormal.cpp
QtScrcpyCore/src/device/controller/inputconvert/inputconvertgame.h
QtScrcpyCore/src/device/controller/inputconvert/inputconvertgame.cpp
QtScrcpyCore/src/device/controller/inputconvert/controlmsg.h
QtScrcpyCore/src/device/controller/inputconvert/controlmsg.cpp
QtScrcpyCore/src/device/controller/inputconvert/keymap/keymap.h
QtScrcpyCore/src/device/controller/inputconvert/keymap/keymap.cpp
QtScrcpyCore/src/device/controller/receiver/devicemsg.h
QtScrcpyCore/src/device/controller/receiver/devicemsg.cpp
QtScrcpyCore/src/device/controller/receiver/receiver.h
QtScrcpyCore/src/device/controller/receiver/receiver.cpp
QtScrcpyCore/src/device/decoder/avframeconvert.h
QtScrcpyCore/src/device/decoder/avframeconvert.cpp
QtScrcpyCore/src/device/decoder/decoder.h
QtScrcpyCore/src/device/decoder/decoder.cpp
QtScrcpyCore/src/device/decoder/fpscounter.h
QtScrcpyCore/src/device/decoder/fpscounter.cpp
QtScrcpyCore/src/device/decoder/videobuffer.h
QtScrcpyCore/src/device/decoder/videobuffer.cpp
QtScrcpyCore/src/device/filehandler/filehandler.h
QtScrcpyCore/src/device/filehandler/filehandler.cpp
QtScrcpyCore/src/device/recorder/recorder.h
QtScrcpyCore/src/device/recorder/recorder.cpp
QtScrcpyCore/src/device/render/qyuvopenglwidget.h
QtScrcpyCore/src/device/render/qyuvopenglwidget.cpp
QtScrcpyCore/src/device/server/server.h
QtScrcpyCore/src/device/server/server.cpp
QtScrcpyCore/src/device/server/tcpserver.h
QtScrcpyCore/src/device/server/tcpserver.cpp
QtScrcpyCore/src/device/server/videosocket.h
QtScrcpyCore/src/device/server/videosocket.cpp
QtScrcpyCore/src/device/stream/stream.h
QtScrcpyCore/src/device/stream/stream.cpp
)
source_group(QtScrcpyCore/src/device FILES ${QC_DEVICE_SOURCES})
# devicemanage
set(QC_DEVICEMANAGE_SOURCES
QtScrcpyCore/src/devicemanage/devicemanage.h
QtScrcpyCore/src/devicemanage/devicemanage.cpp
)
source_group(QtScrcpyCore/src/devicemanage FILES ${QC_DEVICEMANAGE_SOURCES})
# fontawesome
set(QC_FONTAWESOME_SOURCES
fontawesome/iconhelper.h
@ -197,12 +119,13 @@ set(QC_UI_SOURCES
ui/dialog.cpp
ui/dialog.h
ui/dialog.ui
render/qyuvopenglwidget.h
render/qyuvopenglwidget.cpp
)
source_group(ui FILES ${QC_UI_SOURCES})
# util
set(QC_UTIL_SOURCES
util/compat.h
util/config.h
util/config.cpp
util/mousetap/mousetap.h
@ -268,11 +191,6 @@ qt5_add_translation(QC_QM_FILES ${QC_TS_FILES})
# all sources
set(QC_PROJECT_SOURCES
${QC_INCLUDE_SOURCES}
${QC_ADB_SOURCES}
${QC_COMMON_SOURCES}
${QC_DEVICE_SOURCES}
${QC_DEVICEMANAGE_SOURCES}
${QC_FONTAWESOME_SOURCES}
${QC_UIBASE_SOURCES}
${QC_UI_SOURCES}
@ -295,37 +213,11 @@ add_executable(${PROJECT_NAME} ${QC_RUNTIME_TYPE} ${QC_PROJECT_SOURCES})
# Internal include path (todo: remove this, use absolute path include)
#
target_include_directories(${PROJECT_NAME} PRIVATE QtScrcpyCore/include)
target_include_directories(${PROJECT_NAME} PRIVATE QtScrcpyCore/src/adb)
target_include_directories(${PROJECT_NAME} PRIVATE QtScrcpyCore/src/common)
target_include_directories(${PROJECT_NAME} PRIVATE QtScrcpyCore/src/device)
target_include_directories(${PROJECT_NAME} PRIVATE QtScrcpyCore/src/device/filehandler)
target_include_directories(${PROJECT_NAME} PRIVATE QtScrcpyCore/src/device/android)
target_include_directories(${PROJECT_NAME} PRIVATE QtScrcpyCore/src/device/decoder)
target_include_directories(${PROJECT_NAME} PRIVATE QtScrcpyCore/src/device/controller)
target_include_directories(${PROJECT_NAME} PRIVATE QtScrcpyCore/src/device/controller/receiver)
target_include_directories(${PROJECT_NAME} PRIVATE QtScrcpyCore/src/device/controller/inputconvert)
target_include_directories(${PROJECT_NAME} PRIVATE QtScrcpyCore/src/device/controller/inputconvert/keymap)
target_include_directories(${PROJECT_NAME} PRIVATE QtScrcpyCore/src/device/server)
target_include_directories(${PROJECT_NAME} PRIVATE QtScrcpyCore/src/device/stream)
target_include_directories(${PROJECT_NAME} PRIVATE QtScrcpyCore/src/device/render)
target_include_directories(${PROJECT_NAME} PRIVATE QtScrcpyCore/src/device/ui)
target_include_directories(${PROJECT_NAME} PRIVATE QtScrcpyCore/src/device/recorder)
target_include_directories(${PROJECT_NAME} PRIVATE QtScrcpyCore/src/devicemanage)
target_include_directories(${PROJECT_NAME} PRIVATE fontawesome)
target_include_directories(${PROJECT_NAME} PRIVATE util)
target_include_directories(${PROJECT_NAME} PRIVATE uibase)
target_include_directories(${PROJECT_NAME} PRIVATE ui)
#
# common deps
#
# Qt
target_link_libraries(${PROJECT_NAME} PRIVATE
Qt${QT_VERSION_MAJOR}::Widgets
Qt${QT_VERSION_MAJOR}::Network
)
target_include_directories(${PROJECT_NAME} PRIVATE render)
# output dir
# https://cmake.org/cmake/help/latest/prop_gbl/GENERATOR_IS_MULTI_CONFIG.html
@ -346,58 +238,19 @@ set_target_properties(${PROJECT_NAME} PROPERTIES
# windows
if(CMAKE_SYSTEM_NAME STREQUAL "Windows")
# ffmpeg
# include
target_include_directories(${PROJECT_NAME} PRIVATE ../QtScrcpy/QtScrcpyCore/src/third_party/ffmpeg/include)
# link
set(FFMPEG_LIB_PATH "${CMAKE_CURRENT_SOURCE_DIR}/../QtScrcpy/QtScrcpyCore/src/third_party/ffmpeg/lib/${QC_CPU_ARCH}")
target_link_directories(${PROJECT_NAME} PRIVATE ${FFMPEG_LIB_PATH})
target_link_libraries(${PROJECT_NAME} PRIVATE
avformat
avcodec
avutil
swscale
)
# copy
set(FFMPEG_BIN_PATH "${CMAKE_CURRENT_SOURCE_DIR}/../QtScrcpy/QtScrcpyCore/src/third_party/ffmpeg/bin/${QC_CPU_ARCH}")
get_target_property(FFMPEG_BIN_OUTPUT_PATH ${PROJECT_NAME} RUNTIME_OUTPUT_DIRECTORY)
add_custom_command(TARGET ${PROJECT_NAME} POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy_if_different "${FFMPEG_BIN_PATH}/avcodec-58.dll" "${FFMPEG_BIN_OUTPUT_PATH}"
COMMAND ${CMAKE_COMMAND} -E copy_if_different "${FFMPEG_BIN_PATH}/avformat-58.dll" "${FFMPEG_BIN_OUTPUT_PATH}"
COMMAND ${CMAKE_COMMAND} -E copy_if_different "${FFMPEG_BIN_PATH}/avutil-56.dll" "${FFMPEG_BIN_OUTPUT_PATH}"
COMMAND ${CMAKE_COMMAND} -E copy_if_different "${FFMPEG_BIN_PATH}/swscale-5.dll" "${FFMPEG_BIN_OUTPUT_PATH}"
COMMAND ${CMAKE_COMMAND} -E copy_if_different "${FFMPEG_BIN_PATH}/swresample-3.dll" "${FFMPEG_BIN_OUTPUT_PATH}"
)
get_target_property(QSC_BIN_OUTPUT_PATH ${PROJECT_NAME} RUNTIME_OUTPUT_DIRECTORY)
set(QSC_DEPLOY_PATH ${QSC_BIN_OUTPUT_PATH})
endif()
# MacOS
if(CMAKE_SYSTEM_NAME STREQUAL "Darwin")
# ffmpeg
# include
target_include_directories(${PROJECT_NAME} PRIVATE ../QtScrcpy/QtScrcpyCore/src/third_party/ffmpeg/include)
# link
set(FFMPEG_LIB_PATH "${CMAKE_CURRENT_SOURCE_DIR}/../QtScrcpy/QtScrcpyCore/src/third_party/ffmpeg/lib")
target_link_directories(${PROJECT_NAME} PRIVATE ${FFMPEG_LIB_PATH})
target_link_libraries(${PROJECT_NAME} PRIVATE
avformat.58
avcodec.58
avutil.56
swscale.5
)
# copy bundle file
get_target_property(MACOS_BUNDLE_PATH ${PROJECT_NAME} RUNTIME_OUTPUT_DIRECTORY)
set(MACOS_BUNDLE_PATH ${MACOS_BUNDLE_PATH}/${PROJECT_NAME}.app/Contents)
add_custom_command(TARGET ${PROJECT_NAME} POST_BUILD
# dylib,scrcpy-server,adb copy to Contents/MacOS
COMMAND ${CMAKE_COMMAND} -E copy_if_different "${CMAKE_CURRENT_SOURCE_DIR}/../QtScrcpy/QtScrcpyCore/src/third_party/ffmpeg/lib/libavcodec.58.dylib" "${MACOS_BUNDLE_PATH}/MacOS"
COMMAND ${CMAKE_COMMAND} -E copy_if_different "${CMAKE_CURRENT_SOURCE_DIR}/../QtScrcpy/QtScrcpyCore/src/third_party/ffmpeg/lib/libavformat.58.dylib" "${MACOS_BUNDLE_PATH}/MacOS"
COMMAND ${CMAKE_COMMAND} -E copy_if_different "${CMAKE_CURRENT_SOURCE_DIR}/../QtScrcpy/QtScrcpyCore/src/third_party/ffmpeg/lib/libavutil.56.dylib" "${MACOS_BUNDLE_PATH}/MacOS"
COMMAND ${CMAKE_COMMAND} -E copy_if_different "${CMAKE_CURRENT_SOURCE_DIR}/../QtScrcpy/QtScrcpyCore/src/third_party/ffmpeg/lib/libswscale.5.dylib" "${MACOS_BUNDLE_PATH}/MacOS"
COMMAND ${CMAKE_COMMAND} -E copy_if_different "${CMAKE_CURRENT_SOURCE_DIR}/../QtScrcpy/QtScrcpyCore/src/third_party/ffmpeg/lib/libswresample.3.dylib" "${MACOS_BUNDLE_PATH}/MacOS"
set(MACOS_BUNDLE_PATH ${MACOS_BUNDLE_PATH}/${QSC_PROJECT_NAME}.app/Contents)
COMMAND ${CMAKE_COMMAND} -E copy_if_different "${CMAKE_CURRENT_SOURCE_DIR}/../QtScrcpy/QtScrcpyCore/src/third_party/scrcpy-server" "${MACOS_BUNDLE_PATH}/MacOS"
COMMAND ${CMAKE_COMMAND} -E copy_if_different "${CMAKE_CURRENT_SOURCE_DIR}/../QtScrcpy/QtScrcpyCore/src/third_party/adb/mac/adb" "${MACOS_BUNDLE_PATH}/MacOS"
set(QSC_DEPLOY_PATH ${MACOS_BUNDLE_PATH})
add_custom_command(TARGET ${QSC_PROJECT_NAME} POST_BUILD
# config file copy to Contents/MacOS/config
COMMAND ${CMAKE_COMMAND} -E copy_if_different "${CMAKE_CURRENT_SOURCE_DIR}/../config/config.ini" "${MACOS_BUNDLE_PATH}/MacOS/config"
)
@ -426,27 +279,19 @@ endif()
# Linux
if(CMAKE_SYSTEM_NAME STREQUAL "Linux")
set(THREADS_PREFER_PTHREAD_FLAG ON)
find_package(Threads REQUIRED)
# include
target_include_directories(${PROJECT_NAME} PRIVATE ../QtScrcpy/QtScrcpyCore/src/third_party/ffmpeg/include)
# link
set(FFMPEG_LIB_PATH "${CMAKE_CURRENT_SOURCE_DIR}/../QtScrcpy/QtScrcpyCore/src/third_party/ffmpeg/lib")
target_link_directories(${PROJECT_NAME} PRIVATE ${FFMPEG_LIB_PATH})
target_link_libraries(${PROJECT_NAME} PRIVATE
# ffmpeg
avformat
avcodec
avutil
swscale
# qx11
Qt${QT_VERSION_MAJOR}::X11Extras
# xcb https://doc.qt.io/qt-5/linux-requirements.html
xcb
# pthread
Threads::Threads
)
set(QSC_DEPLOY_PATH "")
# linux set app icon: https://blog.csdn.net/MrNoboday/article/details/82870853
endif()
#
# common deps
#
add_subdirectory(QtScrcpyCore)
# Qt
target_link_libraries(${PROJECT_NAME} PRIVATE
Qt${QT_VERSION_MAJOR}::Widgets
Qt${QT_VERSION_MAJOR}::Network
QtScrcpyCore
)

View file

@ -0,0 +1,219 @@
set(QSC_PROJECT_NAME "QtScrcpyCore")
set(CMAKE_INCLUDE_CURRENT_DIR ON)
set(CMAKE_AUTOUIC ON)
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTORCC ON)
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
find_package(QT NAMES Qt6 Qt5 COMPONENTS Widgets Network REQUIRED)
find_package(Qt${QT_VERSION_MAJOR} COMPONENTS Widgets Network REQUIRED)
# check arch
if(CMAKE_SIZEOF_VOID_P EQUAL 8)
set(QSC_CPU_ARCH x64)
else()
set(QSC_CPU_ARCH x86)
endif()
message(STATUS "[${PROJECT_NAME}] QSC_CPU_ARCH:${QSC_CPU_ARCH}")
if(NOT DEFINED QSC_DEPLOY_PATH)
message(FATAL_ERROR "QtScrcpyCore need QSC_DEPLOY_PATH")
endif()
#
# Sources
#
# adb
set(QSC_ADB_SOURCES
src/adb/adbprocessimpl.h
src/adb/adbprocessimpl.cpp
src/adb/adbprocess.cpp
)
source_group(src/adb FILES ${QSC_ADB_SOURCES})
# common
set(QSC_COMMON_SOURCES
src/common/qscrcpyevent.h
)
source_group(src/common FILES ${QSC_COMMON_SOURCES})
# include
set(QSC_INCLUDE_SOURCES
include/QtScrcpyCore.h
include/QtScrcpyCoreDef.h
include/adbprocess.h
)
source_group(include FILES ${QSC_INCLUDE_SOURCES})
# device
set(QSC_DEVICE_SOURCES
src/device/device.h
src/device/device.cpp
src/device/compat.h
src/device/android/input.h
src/device/android/keycodes.h
src/device/controller/controller.h
src/device/controller/controller.cpp
src/device/controller/bufferutil.h
src/device/controller/bufferutil.cpp
src/device/controller/inputconvert/inputconvertbase.h
src/device/controller/inputconvert/inputconvertbase.cpp
src/device/controller/inputconvert/inputconvertnormal.h
src/device/controller/inputconvert/inputconvertnormal.cpp
src/device/controller/inputconvert/inputconvertgame.h
src/device/controller/inputconvert/inputconvertgame.cpp
src/device/controller/inputconvert/controlmsg.h
src/device/controller/inputconvert/controlmsg.cpp
src/device/controller/inputconvert/keymap/keymap.h
src/device/controller/inputconvert/keymap/keymap.cpp
src/device/controller/receiver/devicemsg.h
src/device/controller/receiver/devicemsg.cpp
src/device/controller/receiver/receiver.h
src/device/controller/receiver/receiver.cpp
src/device/decoder/avframeconvert.h
src/device/decoder/avframeconvert.cpp
src/device/decoder/decoder.h
src/device/decoder/decoder.cpp
src/device/decoder/fpscounter.h
src/device/decoder/fpscounter.cpp
src/device/decoder/videobuffer.h
src/device/decoder/videobuffer.cpp
src/device/filehandler/filehandler.h
src/device/filehandler/filehandler.cpp
src/device/recorder/recorder.h
src/device/recorder/recorder.cpp
src/device/server/server.h
src/device/server/server.cpp
src/device/server/tcpserver.h
src/device/server/tcpserver.cpp
src/device/server/videosocket.h
src/device/server/videosocket.cpp
src/device/stream/stream.h
src/device/stream/stream.cpp
)
source_group(src/device FILES ${QSC_DEVICE_SOURCES})
# devicemanage
set(QSC_DEVICEMANAGE_SOURCES
src/devicemanage/devicemanage.h
src/devicemanage/devicemanage.cpp
)
source_group(src/devicemanage FILES ${QSC_DEVICEMANAGE_SOURCES})
add_library(QtScrcpyCore STATIC
${QSC_ADB_SOURCES}
${QSC_COMMON_SOURCES}
${QSC_INCLUDE_SOURCES}
${QSC_DEVICE_SOURCES}
${QSC_DEVICEMANAGE_SOURCES}
)
target_link_libraries(QtScrcpyCore PRIVATE
Qt${QT_VERSION_MAJOR}::Widgets
Qt${QT_VERSION_MAJOR}::Network
)
target_include_directories(${QSC_PROJECT_NAME} PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/include)
target_include_directories(${QSC_PROJECT_NAME} PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/src/adb)
target_include_directories(${QSC_PROJECT_NAME} PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/src/common)
target_include_directories(${QSC_PROJECT_NAME} PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/src/device)
target_include_directories(${QSC_PROJECT_NAME} PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/src/device/filehandler)
target_include_directories(${QSC_PROJECT_NAME} PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/src/device/android)
target_include_directories(${QSC_PROJECT_NAME} PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/src/device/decoder)
target_include_directories(${QSC_PROJECT_NAME} PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/src/device/controller)
target_include_directories(${QSC_PROJECT_NAME} PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/src/device/controller/receiver)
target_include_directories(${QSC_PROJECT_NAME} PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/src/device/controller/inputconvert)
target_include_directories(${QSC_PROJECT_NAME} PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/src/device/controller/inputconvert/keymap)
target_include_directories(${QSC_PROJECT_NAME} PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/src/device/server)
target_include_directories(${QSC_PROJECT_NAME} PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/src/device/stream)
target_include_directories(${QSC_PROJECT_NAME} PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/src/device/ui)
target_include_directories(${QSC_PROJECT_NAME} PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/src/device/recorder)
target_include_directories(${QSC_PROJECT_NAME} PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/src/devicemanage)
#
# plantform deps
#
# windows
if(CMAKE_SYSTEM_NAME STREQUAL "Windows")
# ffmpeg
# include
target_include_directories(${QSC_PROJECT_NAME} PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/src/third_party/ffmpeg/include)
# link
set(FFMPEG_LIB_PATH "${CMAKE_CURRENT_SOURCE_DIR}/src/third_party/ffmpeg/lib/${QSC_CPU_ARCH}")
target_link_directories(${QSC_PROJECT_NAME} PUBLIC ${FFMPEG_LIB_PATH})
target_link_libraries(${QSC_PROJECT_NAME} PRIVATE
avformat
avcodec
avutil
swscale
)
# copy
set(FFMPEG_BIN_PATH "${CMAKE_CURRENT_SOURCE_DIR}/src/third_party/ffmpeg/bin/${QSC_CPU_ARCH}")
add_custom_command(TARGET ${QSC_PROJECT_NAME} POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy_if_different "${FFMPEG_BIN_PATH}/avcodec-58.dll" "${QSC_DEPLOY_PATH}"
COMMAND ${CMAKE_COMMAND} -E copy_if_different "${FFMPEG_BIN_PATH}/avformat-58.dll" "${QSC_DEPLOY_PATH}"
COMMAND ${CMAKE_COMMAND} -E copy_if_different "${FFMPEG_BIN_PATH}/avutil-56.dll" "${QSC_DEPLOY_PATH}"
COMMAND ${CMAKE_COMMAND} -E copy_if_different "${FFMPEG_BIN_PATH}/swscale-5.dll" "${QSC_DEPLOY_PATH}"
COMMAND ${CMAKE_COMMAND} -E copy_if_different "${FFMPEG_BIN_PATH}/swresample-3.dll" "${QSC_DEPLOY_PATH}"
)
endif()
# MacOS
if(CMAKE_SYSTEM_NAME STREQUAL "Darwin")
# ffmpeg
# include
target_include_directories(${QSC_PROJECT_NAME} PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/src/third_party/ffmpeg/include)
# link
set(FFMPEG_LIB_PATH "${CMAKE_CURRENT_SOURCE_DIR}/src/third_party/ffmpeg/lib")
target_link_directories(${QSC_PROJECT_NAME} PUBLIC ${FFMPEG_LIB_PATH})
target_link_libraries(${QSC_PROJECT_NAME} PRIVATE
avformat.58
avcodec.58
avutil.56
swscale.5
)
# copy bundle file
add_custom_command(TARGET ${QSC_PROJECT_NAME} POST_BUILD
# dylib,scrcpy-server,adb copy to Contents/MacOS
COMMAND ${CMAKE_COMMAND} -E copy_if_different "${CMAKE_CURRENT_SOURCE_DIR}/${CMAKE_CURRENT_SOURCE_DIR}/src/third_party/ffmpeg/lib/libavcodec.58.dylib" "${QSC_DEPLOY_PATH}/MacOS"
COMMAND ${CMAKE_COMMAND} -E copy_if_different "${CMAKE_CURRENT_SOURCE_DIR}/${CMAKE_CURRENT_SOURCE_DIR}/src/third_party/ffmpeg/lib/libavformat.58.dylib" "${QSC_DEPLOY_PATH}/MacOS"
COMMAND ${CMAKE_COMMAND} -E copy_if_different "${CMAKE_CURRENT_SOURCE_DIR}/${CMAKE_CURRENT_SOURCE_DIR}/src/third_party/ffmpeg/lib/libavutil.56.dylib" "${QSC_DEPLOY_PATH}/MacOS"
COMMAND ${CMAKE_COMMAND} -E copy_if_different "${CMAKE_CURRENT_SOURCE_DIR}/${CMAKE_CURRENT_SOURCE_DIR}/src/third_party/ffmpeg/lib/libswscale.5.dylib" "${QSC_DEPLOY_PATH}/MacOS"
COMMAND ${CMAKE_COMMAND} -E copy_if_different "${CMAKE_CURRENT_SOURCE_DIR}/${CMAKE_CURRENT_SOURCE_DIR}/src/third_party/ffmpeg/lib/libswresample.3.dylib" "${QSC_DEPLOY_PATH}/MacOS"
COMMAND ${CMAKE_COMMAND} -E copy_if_different "${CMAKE_CURRENT_SOURCE_DIR}/${CMAKE_CURRENT_SOURCE_DIR}/src/third_party/scrcpy-server" "${QSC_DEPLOY_PATH}/MacOS"
COMMAND ${CMAKE_COMMAND} -E copy_if_different "${CMAKE_CURRENT_SOURCE_DIR}/${CMAKE_CURRENT_SOURCE_DIR}/src/third_party/adb/mac/adb" "${QSC_DEPLOY_PATH}/MacOS"
)
endif()
# Linux
if(CMAKE_SYSTEM_NAME STREQUAL "Linux")
set(THREADS_PREFER_PTHREAD_FLAG ON)
find_package(Threads REQUIRED)
# include
target_include_directories(${QSC_PROJECT_NAME} PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/src/third_party/ffmpeg/include)
# link
set(FFMPEG_LIB_PATH "${CMAKE_CURRENT_SOURCE_DIR}/${CMAKE_CURRENT_SOURCE_DIR}/src/third_party/ffmpeg/lib")
target_link_directories(${QSC_PROJECT_NAME} PUBLIC ${FFMPEG_LIB_PATH})
target_link_libraries(${QSC_PROJECT_NAME} PRIVATE
# ffmpeg
avformat
avcodec
avutil
swscale
# qx11
Qt${QT_VERSION_MAJOR}::X11Extras
# xcb https://doc.qt.io/qt-5/linux-requirements.html
xcb
# pthread
Threads::Threads
)
endif()

View file

@ -8,24 +8,10 @@
#include "keymap.h"
QString KeyMap::s_keyMapPath = "";
KeyMap::KeyMap(QObject *parent) : QObject(parent) {}
KeyMap::~KeyMap() {}
const QString &KeyMap::getKeyMapPath()
{
if (s_keyMapPath.isEmpty()) {
s_keyMapPath = QString::fromLocal8Bit(qgetenv("QTSCRCPY_KEYMAP_PATH"));
QFileInfo fileInfo(s_keyMapPath);
if (s_keyMapPath.isEmpty() || !fileInfo.isDir()) {
s_keyMapPath = QCoreApplication::applicationDirPath() + "/keymap";
}
}
return s_keyMapPath;
}
void KeyMap::loadKeyMap(const QString &json)
{
QString errorString;

View file

@ -117,8 +117,6 @@ public:
bool isValidSteerWheelMap();
const KeyMap::KeyMapNode &getMouseMoveMap();
static const QString &getKeyMapPath();
private:
// set up the reverse map from key/event event to keyMapNode
void makeReverseMap();

View file

@ -10,7 +10,6 @@
#include "recorder.h"
#include "server.h"
#include "stream.h"
#include "videoform.h"
namespace qsc {

View file

@ -5,8 +5,8 @@
#include "devicemanage.h"
#include "server.h"
#include "videoform.h"
#include "device.h"
#include "stream.h"
namespace qsc {
@ -17,9 +17,13 @@ IDeviceManage& IDeviceManage::getInstance() {
return dm;
}
DeviceManage::DeviceManage() {}
DeviceManage::DeviceManage() {
Stream::init();
}
DeviceManage::~DeviceManage() {}
DeviceManage::~DeviceManage() {
Stream::deInit();
}
QPointer<IDevice> DeviceManage::getDevice(const QString &serial)
{

View file

@ -9,7 +9,6 @@
#include "config.h"
#include "dialog.h"
#include "mousetap/mousetap.h"
#include "stream.h"
static Dialog *g_mainDlg = Q_NULLPTR;
static QtMessageHandler g_oldMessageHandler = Q_NULLPTR;
@ -73,7 +72,6 @@ int main(int argc, char *argv[])
QSurfaceFormat::setDefaultFormat(varFormat);
g_oldMessageHandler = qInstallMessageHandler(myMessageOutput);
Stream::init();
QApplication a(argc, argv);
// windows下通过qmake VERSION变量或者rc设置版本号和应用名称后这里可以直接拿到
@ -118,8 +116,6 @@ int main(int argc, char *argv[])
#if defined(Q_OS_WIN32) || defined(Q_OS_OSX)
MouseTap::getInstance()->quitMouseEventTap();
#endif
Stream::deInit();
return ret;
}

View file

@ -6,12 +6,24 @@
#include <QTimer>
#include "config.h"
#include "device.h"
#include "dialog.h"
#include "keymap.h"
#include "ui_dialog.h"
#include "videoform.h"
QString s_keyMapPath = "";
const QString &getKeyMapPath()
{
if (s_keyMapPath.isEmpty()) {
s_keyMapPath = QString::fromLocal8Bit(qgetenv("QTSCRCPY_KEYMAP_PATH"));
QFileInfo fileInfo(s_keyMapPath);
if (s_keyMapPath.isEmpty() || !fileInfo.isDir()) {
s_keyMapPath = QCoreApplication::applicationDirPath() + "/keymap";
}
}
return s_keyMapPath;
}
Dialog::Dialog(QWidget *parent) : QDialog(parent), ui(new Ui::Dialog)
{
ui->setupUi(this);
@ -214,7 +226,7 @@ void Dialog::delayMs(int ms)
QString Dialog::getGameScript(const QString &fileName)
{
QFile loadFile(KeyMap::getKeyMapPath() + "/" + fileName);
QFile loadFile(getKeyMapPath() + "/" + fileName);
if (!loadFile.open(QIODevice::ReadOnly)) {
outLog("open file failed:" + fileName, true);
return "";
@ -410,6 +422,7 @@ void Dialog::getIPbyIp()
void Dialog::onDeviceConnected(bool success, const QString &serial, const QString &deviceName, const QSize &size)
{
Q_UNUSED(deviceName);
if (!success) {
return;
}
@ -506,7 +519,7 @@ void Dialog::on_stopAllServerBtn_clicked()
void Dialog::on_refreshGameScriptBtn_clicked()
{
ui->gameBox->clear();
QDir dir(KeyMap::getKeyMapPath());
QDir dir(getKeyMapPath());
if (!dir.exists()) {
outLog("keymap directory not find", true);
return;

View file

@ -14,17 +14,12 @@
#include <QtWidgets/QHBoxLayout>
#include "config.h"
#include "controller.h"
#include "iconhelper.h"
#include "qyuvopenglwidget.h"
#include "toolform.h"
#include "mousetap/mousetap.h"
#include "ui_videoform.h"
#include "videoform.h"
extern "C"
{
#include "libavutil/frame.h"
}
VideoForm::VideoForm(bool framelessWindow, bool skin, QWidget *parent) : QWidget(parent), ui(new Ui::videoForm), m_skin(skin)
{
@ -287,7 +282,6 @@ void VideoForm::installShortcut()
emit device->postPower();
});
// setScreenPowerMode(ControlMsg::SPM_OFF)
shortcut = new QShortcut(QKeySequence("Ctrl+o"), this);
shortcut->setAutoRepeat(false);
connect(shortcut, &QShortcut::activated, this, [this]() {
@ -295,7 +289,7 @@ void VideoForm::installShortcut()
if (!device) {
return;
}
emit device->setScreenPowerMode(ControlMsg::SPM_OFF);
emit device->setScreenPowerMode(false);
});
// expandNotificationPanel