Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
355 commits
Select commit Hold shift + click to select a range
ff02e56
Added status display
elly-funique Feb 24, 2026
58a77b6
Update codebase
elly-funique Feb 24, 2026
b795ef6
Update status display on camera list view
elly-funique Feb 25, 2026
49969cd
Added sd card stuff
elly-funique Feb 25, 2026
2f50778
Update camera list
elly-funique Feb 25, 2026
cfe5779
Update camera list ui
elly-funique Feb 25, 2026
e0871ef
Update display for center text information for camera list
elly-funique Feb 25, 2026
d104bf1
Fixed style for camera list element
elly-funique Feb 26, 2026
df31905
Update apply setting button and feedback menu
elly-funique Mar 2, 2026
3dd3acd
Moving meida action to tab page content
elly-funique Mar 2, 2026
b4e28cb
Moving UI to tab
elly-funique Mar 2, 2026
95f17d5
Merge branch 'develop' into v0.1.0
elly-funique Mar 2, 2026
2b44f87
Merge pull request #7 from Funique2022/v0.1.0
elly-funique Mar 2, 2026
221f469
Added build all script
elly-funique Mar 2, 2026
cd2561f
From find package opencv to content declear
elly-funique Mar 2, 2026
6926b0c
Update build script
elly-funique Mar 2, 2026
92f83b0
Update build
elly-funique Mar 2, 2026
0357a16
Merge pull request #8 from Funique2022/v0.1.0
elly-funique Mar 2, 2026
ad97a41
Update build script
elly-funique Mar 2, 2026
72e1b50
Update toolchain
elly-funique Mar 2, 2026
b086b0a
Replace build script from sh to bat
elly-funique Mar 2, 2026
017ca8a
Update build script
elly-funique Mar 2, 2026
620c8f6
Update cmake files
elly-funique Mar 3, 2026
69f5ec0
Added cmake file for windows
elly-funique Mar 3, 2026
990c12c
Update readme and script update
elly-funique Mar 3, 2026
90e633c
Remove gcc flag for msvc build script
elly-funique Mar 3, 2026
8eaa394
Remove build all
elly-funique Mar 3, 2026
a8c2e8a
We switch from DX12 DX11 include cmake for SDL3 to OPENGL only
elly-funique Mar 3, 2026
2b18316
Update
elly-funique Mar 3, 2026
c5f906a
Update
elly-funique Mar 3, 2026
d30b0f2
Update readme for 7z requirement
elly-funique Mar 3, 2026
3c09a54
Update opencv import
elly-funique Mar 3, 2026
b3fd520
Added gitignore for opencv folder
elly-funique Mar 3, 2026
805b70a
Precompiled header issue
elly-funique Mar 3, 2026
704eced
Update build script for msvc build
elly-funique Mar 3, 2026
5e232a2
Update opencv
elly-funique Mar 3, 2026
2a4c0bb
Update
elly-funique Mar 3, 2026
d4b0cba
Update opencv import pths
elly-funique Mar 3, 2026
10a6ce1
Added SDL3 source code
elly-funique Mar 3, 2026
757c2ab
Update sdl3 source code
elly-funique Mar 3, 2026
06c1bab
Update
elly-funique Mar 3, 2026
9a21dd4
Fix include from window.h to windows.h
elly-funique Mar 3, 2026
400dd26
Fixed cmake libraries
elly-funique Mar 3, 2026
0f63bdd
Update
elly-funique Mar 3, 2026
92bb7ac
Update
elly-funique Mar 3, 2026
856f710
Update
elly-funique Mar 3, 2026
2b18bab
Update the sdl process init and end
elly-funique Mar 3, 2026
c28b55a
Remove extern "C" prevent corss platform msvc build issue
elly-funique Mar 3, 2026
e21cef4
Fix include
elly-funique Mar 3, 2026
4bfa2e7
Update
elly-funique Mar 3, 2026
f53a35a
Fixed break line group camera
elly-funique Mar 3, 2026
6b6ecb5
Fixed some bug
elly-funique Mar 3, 2026
938ae7d
Fixed setting getter in common place
elly-funique Mar 3, 2026
49854a6
Update
elly-funique Mar 3, 2026
02a2266
Update Camera list UI
elly-funique Mar 3, 2026
4201746
Preset setting
elly-funique Mar 3, 2026
0ca0689
Update preset
elly-funique Mar 3, 2026
6f4cf21
Update padding content
elly-funique Mar 3, 2026
a895aa4
Added locate
elly-funique Mar 3, 2026
229e08c
Trying to fix gl.h error
elly-funique Mar 4, 2026
b8cad4c
Remove code #ifndef issue
elly-funique Mar 4, 2026
44c30a5
update
elly-funique Mar 4, 2026
7b308c4
Fixed corss platform issue
elly-funique Mar 4, 2026
7fec853
Trying to fixed code
elly-funique Mar 4, 2026
eb6173b
s
elly-funique Mar 4, 2026
a72d218
Update lib
elly-funique Mar 4, 2026
00b6947
s
elly-funique Mar 4, 2026
4dea729
Added extern C
elly-funique Mar 4, 2026
0aa10af
update
elly-funique Mar 4, 2026
b7babf0
update
elly-funique Mar 4, 2026
6cf5ffc
Update
elly-funique Mar 4, 2026
84ed9f4
Update
elly-funique Mar 4, 2026
943c794
Uopdate
elly-funique Mar 4, 2026
55e5bf7
Update lib req
elly-funique Mar 4, 2026
21e154b
Update
elly-funique Mar 4, 2026
af447cc
Update lib list
elly-funique Mar 4, 2026
6bd0fe8
Update mdns declear
elly-funique Mar 4, 2026
74f0555
Update lib list
elly-funique Mar 4, 2026
a47034b
u
elly-funique Mar 4, 2026
92f71fb
Update lib list
elly-funique Mar 4, 2026
ce20d5b
Update cmake
elly-funique Mar 4, 2026
87f24e6
Update cmake
elly-funique Mar 4, 2026
fb1efbc
update standard
elly-funique Mar 4, 2026
db3ac13
s
elly-funique Mar 4, 2026
7819791
update
elly-funique Mar 4, 2026
9506bed
update
elly-funique Mar 4, 2026
2a9a1f7
uopp
elly-funique Mar 4, 2026
354867b
s
elly-funique Mar 4, 2026
5e31faa
s
elly-funique Mar 4, 2026
80d4e8f
update
elly-funique Mar 4, 2026
c7a7bfb
update
elly-funique Mar 4, 2026
84aaa42
update
elly-funique Mar 4, 2026
4c06698
s
elly-funique Mar 4, 2026
b07fdc6
update link lib
elly-funique Mar 4, 2026
813a4a1
update bash file
elly-funique Mar 4, 2026
73da266
s
elly-funique Mar 4, 2026
9cbafb6
update
elly-funique Mar 4, 2026
b6102ff
Update
elly-funique Mar 4, 2026
c8d6ac7
Update Post Build policy
elly-funique Mar 4, 2026
7f21917
Fixed builder issue for msvc
elly-funique Mar 4, 2026
321dca7
Update multiple viewport setup
elly-funique Mar 4, 2026
b341a56
Added macro for win init and added style setting win
elly-funique Mar 5, 2026
70ed54d
Remove some al slop and added style menu
elly-funique Mar 5, 2026
92fdc13
Added camera list filter and sort option
elly-funique Mar 5, 2026
ea5b648
Update filter UI
elly-funique Mar 5, 2026
3338f25
Added style setting menu
elly-funique Mar 5, 2026
9d8eccd
Added style setter
elly-funique Mar 5, 2026
ecfe0cc
Update state inspector drag drop event
elly-funique Mar 5, 2026
017213e
Fixed moving issue in inspector UI design
elly-funique Mar 6, 2026
a0e3295
Fixed memory curroption in popwin class structure
elly-funique Mar 6, 2026
0b5b27a
Trying to make rotating window in preview popup
elly-funique Mar 6, 2026
63b3427
Finish rotation function
elly-funique Mar 6, 2026
2d56318
Merge pull request #9 from Funique2022/v0.1.1
elly-funique Mar 6, 2026
846c356
update
elly-funique Mar 6, 2026
220f4b9
update cmake
elly-funique Mar 6, 2026
6b0ddee
Update
elly-funique Mar 9, 2026
02b76bf
update
elly-funique Mar 9, 2026
c5a8c95
update
elly-funique Mar 9, 2026
1d07881
Update lib import
elly-funique Mar 9, 2026
945ee59
Update lib imports
elly-funique Mar 9, 2026
e220cd1
Update
elly-funique Mar 9, 2026
445f88b
Update
elly-funique Mar 9, 2026
617a139
Update
elly-funique Mar 9, 2026
646f2fd
Update include
elly-funique Mar 9, 2026
fb3c347
Update
elly-funique Mar 9, 2026
a6c1c9e
Added lib import
elly-funique Mar 9, 2026
4c869fb
Merge pull request #11 from Funique2022/v0.1.1
elly-funique Mar 9, 2026
3ca80c3
Added init value
elly-funique Mar 9, 2026
44eb62f
Update
elly-funique Mar 9, 2026
642299f
Trying to added peer udp instead of multicast
elly-funique Mar 9, 2026
d750e31
Trying to update
elly-funique Mar 9, 2026
f26061b
Update codebase typo
elly-funique Mar 9, 2026
bdf1abe
Update sender
elly-funique Mar 9, 2026
74dd5c0
Update multicast
elly-funique Mar 9, 2026
c4351a5
update
elly-funique Mar 9, 2026
df0f3ae
Update
elly-funique Mar 9, 2026
6ad8314
update
elly-funique Mar 9, 2026
3f26e29
Uopdate
elly-funique Mar 9, 2026
fa566c6
Uopdate
elly-funique Mar 9, 2026
4e2fcfe
Print pipeline
elly-funique Mar 9, 2026
1bb6eed
update
elly-funique Mar 9, 2026
906665e
Remove {0} for opencv pipeline
elly-funique Mar 9, 2026
98e05cc
update
elly-funique Mar 9, 2026
8d19aa9
s
elly-funique Mar 9, 2026
4c5df28
Update and it will print the getBuildInformation for it now
elly-funique Mar 9, 2026
191a598
Added opencv source
elly-funique Mar 9, 2026
93e4c75
Update
elly-funique Mar 9, 2026
9b2bc45
update
elly-funique Mar 9, 2026
37657bf
update
elly-funique Mar 9, 2026
7306c47
Update
elly-funique Mar 9, 2026
7df5857
Update
elly-funique Mar 9, 2026
9f12747
Added message
elly-funique Mar 9, 2026
1005714
Remove error
elly-funique Mar 9, 2026
271b7a9
update
elly-funique Mar 9, 2026
4f9fe53
Update
elly-funique Mar 9, 2026
891409c
Update
elly-funique Mar 9, 2026
65e2a1d
update
elly-funique Mar 9, 2026
684c607
added src
elly-funique Mar 9, 2026
20ede8e
update
elly-funique Mar 9, 2026
b1ecdcc
update
elly-funique Mar 9, 2026
5d04173
Update
elly-funique Mar 9, 2026
adeda19
Update
elly-funique Mar 9, 2026
136d70c
u
elly-funique Mar 9, 2026
d5d9412
s
elly-funique Mar 9, 2026
e09a819
s
elly-funique Mar 9, 2026
a5e472f
i
elly-funique Mar 9, 2026
51ad8bd
up
elly-funique Mar 9, 2026
8b55f20
update
elly-funique Mar 9, 2026
1169b49
update
elly-funique Mar 9, 2026
a218503
u
elly-funique Mar 9, 2026
950994b
update
elly-funique Mar 10, 2026
329f1e8
Added zlib
elly-funique Mar 10, 2026
7677f4b
Update cmake
elly-funique Mar 10, 2026
cb088c7
Turn off codec
elly-funique Mar 10, 2026
63a7b0b
Update
elly-funique Mar 10, 2026
857639c
Give up turn off imgcodec
elly-funique Mar 10, 2026
43cc302
update
elly-funique Mar 10, 2026
e6b483f
Update batch
elly-funique Mar 10, 2026
f8444ab
Update
elly-funique Mar 10, 2026
f97f3a7
Fixed windows event
elly-funique Mar 10, 2026
d5973f0
Trying fixing multi viewport
elly-funique Mar 10, 2026
8f7800c
Update
elly-funique Mar 10, 2026
5ba870f
Update
elly-funique Mar 10, 2026
c2e0f04
Update cmake
elly-funique Mar 10, 2026
16ec03b
Added gstreamer
elly-funique Mar 10, 2026
da948c5
Update
elly-funique Mar 10, 2026
58ac6df
Update
elly-funique Mar 10, 2026
e2800b9
Update
elly-funique Mar 10, 2026
476cf1e
Update
elly-funique Mar 10, 2026
3a5faf7
update
elly-funique Mar 10, 2026
0bafdf7
Update
elly-funique Mar 10, 2026
2536e8b
Remove that
elly-funique Mar 10, 2026
dda8715
Update popup for preview, win and linux preprocessor
elly-funique Mar 10, 2026
651326b
Added dll copy command
elly-funique Mar 10, 2026
1ac8d06
update
elly-funique Mar 10, 2026
b362d8f
r
elly-funique Mar 10, 2026
2e61f14
u
elly-funique Mar 10, 2026
e6fbc79
Added video
elly-funique Mar 10, 2026
31f89e8
u
elly-funique Mar 10, 2026
7adb8b6
update
elly-funique Mar 10, 2026
dc06db3
u
elly-funique Mar 10, 2026
568dff6
update
elly-funique Mar 10, 2026
05d949f
remove
elly-funique Mar 10, 2026
8773e36
u
elly-funique Mar 10, 2026
a23fd74
u
elly-funique Mar 10, 2026
de39ec9
u
elly-funique Mar 10, 2026
9253d02
update readme
elly-funique Mar 10, 2026
b60f4c0
update
elly-funique Mar 10, 2026
0598b6a
update style win context
elly-funique Mar 10, 2026
49d44ad
Update
elly-funique Mar 10, 2026
b4e3b12
Fixed func in style win
elly-funique Mar 10, 2026
e239f06
Fixed photo burst ID issue
elly-funique Mar 10, 2026
930b08a
Fixed display issue
elly-funique Mar 10, 2026
aec8a7a
Added style setting
elly-funique Mar 10, 2026
09eab70
Update camera value getter
elly-funique Mar 10, 2026
4f74ad5
Remove alpha setting
elly-funique Mar 10, 2026
ee50dbb
Added style win
elly-funique Mar 10, 2026
6f02104
Update
elly-funique Mar 10, 2026
1ee423f
Update camera list group content
elly-funique Mar 11, 2026
f5691cc
Font dynamic
elly-funique Mar 11, 2026
3caf855
Support chinese and font update, bash update, imgui init update, Adde…
elly-funique Mar 11, 2026
61318a6
Added media open target
elly-funique Mar 11, 2026
297c521
Merge pull request #12 from Funique2022/v0.1.2
elly-funique Mar 11, 2026
bb8535a
trying to fix compile error
elly-funique Mar 11, 2026
084e93d
Update cmake for copy otf
elly-funique Mar 11, 2026
9c7cd34
Update
elly-funique Mar 11, 2026
40ad8d1
update cmake
elly-funique Mar 11, 2026
5dbf658
Remove extra stuff
elly-funique Mar 11, 2026
ff8f12b
Merge pull request #13 from Funique2022/v0.1.2
elly-funique Mar 11, 2026
8db371b
Added format for timecode
elly-funique Mar 13, 2026
a2a7ee0
Added popup tooltip for media options
elly-funique Mar 16, 2026
8a82e64
Added library
elly-funique Mar 17, 2026
9cb910d
debug output for media download
elly-funique Mar 19, 2026
84f8070
Added media download location input field
elly-funique Mar 19, 2026
a3df1d7
YES
elly-funique Mar 19, 2026
ea73dc8
Added extension
elly-funique Mar 19, 2026
a4a23a5
Added date time folder create setting
elly-funique Mar 19, 2026
30377f7
Added put finish toggle
elly-funique Mar 19, 2026
ae5dc7e
Update button size
elly-funique Mar 19, 2026
5586d94
added finish file logic
elly-funique Mar 19, 2026
224e971
fix typo
elly-funique Mar 19, 2026
ee56619
Added download method
elly-funique Mar 19, 2026
6ec9e6e
package bash file created
elly-funique Mar 19, 2026
316a620
Merge pull request #14 from Funique2022/v0.1.2
Elly2018 Mar 19, 2026
7af1d48
update
elly-funique Mar 19, 2026
22182a8
update gitignore
elly-funique Mar 19, 2026
4bf66ab
Update batch for packaging built files
elly-funique Mar 20, 2026
e41e249
Added locate features
elly-funique Mar 20, 2026
51d0f27
Fixed server libc bug
elly-funique Mar 24, 2026
1395e1b
Merge pull request #15 from Funique2022/v0.1.3
Elly2018 Mar 24, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
20 changes: 18 additions & 2 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -43,11 +43,27 @@

# Build directories
build_master/
Build_master/
build_master-*/
build_master_win/
build_master_win-*/
build_server/
Build_server/
build_server-*/
build_server_win/
build_server_win-*/
build_server_amd/
build_server_amd-*/
lib/*.exe

package_master/
package_master-*/
package_master_win/
package_master_win-*/
package_server/
package_server-*/
package_server_win/
package_server_win-*/
package_server_amd/
package_server_amd-*/

# CMake generated files
CMakeFiles/
Expand Down
2 changes: 1 addition & 1 deletion .vscode/c_cpp_properties.json
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@
"defines": [],
"compilerPath": "/usr/bin/gcc",
"cStandard": "c17",
"cppStandard": "gnu++17",
"cppStandard": "c++17",
"intelliSenseMode": "linux-gcc-x64",
"configurationProvider": "ms-vscode.makefile-tools"
}
Expand Down
3 changes: 3 additions & 0 deletions .vscode/settings.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
{
"C_Cpp.errorSquiggles": "disabled"
}
301 changes: 270 additions & 31 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1,6 +1,19 @@
cmake_minimum_required(VERSION 3.14)
project(GoPro_Controller)
project(GoPro_Controller LANGUAGES CXX)
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_EXTENSIONS OFF)
set(CMAKE_C_STANDARD 17)

# --- NUCLEAR STATIC OVERRIDES (MUST BE AT THE TOP) ---
# These must run before ANY include(FetchContent)
set(BUILD_SHARED_LIBS OFF CACHE BOOL "Global Static" FORCE)
set(BUILD_STATIC_LIBS ON CACHE BOOL "Global Static" FORCE)

# libhv specific overrides
set(HV_BUILD_STATIC ON CACHE BOOL "Build libhv static" FORCE)
set(HV_BUILD_SHARED OFF CACHE BOOL "NO Shared libhv" FORCE)
set(HV_WITH_MQTT OFF CACHE BOOL "Disable MQTT" FORCE) # Optional: Faster build

# Options
option(BUILD_SERVER "Build the server (RPi) executable" ON)
Expand All @@ -9,6 +22,24 @@ option(BUILD_MASTER "Build the master (PC) executable" ON)

# libhv (Required for Server, used in Master too if needed, but primarily Server)
if(BUILD_SERVER OR BUILD_MASTER)
# --- GLOBAL CURL CONFIGURATION (Apply to BOTH Server and Master) ---
# Disable protocols we don't need to prevent errors like 'ldapsb_tls'
set(CURL_DISABLE_LDAP ON CACHE INTERNAL "" FORCE)
set(CURL_DISABLE_LDAPS ON CACHE INTERNAL "" FORCE)
set(CURL_DISABLE_RTSP ON CACHE INTERNAL "" FORCE)
set(CURL_DISABLE_DICT ON CACHE INTERNAL "" FORCE)
set(CURL_DISABLE_TFTP ON CACHE INTERNAL "" FORCE)
set(CURL_DISABLE_TELNET ON CACHE INTERNAL "" FORCE)
set(CURL_DISABLE_POP3 ON CACHE INTERNAL "" FORCE)
set(CURL_DISABLE_IMAP ON CACHE INTERNAL "" FORCE)
set(CURL_DISABLE_SMB ON CACHE INTERNAL "" FORCE)
set(CURL_DISABLE_SMTP ON CACHE INTERNAL "" FORCE)
set(CURL_DISABLE_GOPHER ON CACHE INTERNAL "" FORCE)
# Curl Configuration for Static Builds
set(BUILD_CURL_EXE OFF CACHE INTERNAL "")
set(BUILD_TESTING OFF CACHE INTERNAL "")
set(CURL_USE_OPENSSL OFF CACHE INTERNAL "")

include(FetchContent)
FetchContent_Declare(
libhv
Expand All @@ -20,34 +51,49 @@ if(BUILD_SERVER OR BUILD_MASTER)
set(MDNS_DIR "lib/mdns")
file(GLOB MDNS_SOURCES
"${MDNS_DIR}/src/logger.cpp"
"${MDNS_DIR}/src/mdns.h"
"${MDNS_DIR}/src/mdns.cpp"
"${MDNS_DIR}/src/mdns.h"
"${MDNS_DIR}/src/utils.cpp"
)
if (BUILD_SERVER)
# --- Curl Configuration for AArch64 ---
set(SIZEOF_OFF_T 8 CACHE INTERNAL "")
set(SIZEOF_CURL_OFF_T 8 CACHE INTERNAL "")
set(SIZEOF_SIZE_T 8 CACHE INTERNAL "")
set(SIZEOF_LONG 8 CACHE INTERNAL "")
set(HAVE_RECV ON CACHE INTERNAL "")
set(HAVE_SEND ON CACHE INTERNAL "")
set(HAVE_BOOL_T ON CACHE INTERNAL "")

# Disable features that usually break cross-compiles
set(CURL_DISABLE_LDAP ON CACHE INTERNAL "")
set(CURL_DISABLE_LDAPS ON CACHE INTERNAL "")
set(BUILD_CURL_EXE OFF CACHE INTERNAL "")
set(BUILD_TESTING OFF CACHE INTERNAL "")
set(CURL_USE_OPENSSL OFF CACHE INTERNAL "")
set(CURL_ENABLE_SSL OFF CACHE INTERNAL "")
endif()
FetchContent_Declare(
curl
URL https://github.com/curl/curl/releases/download/curl-8_5_0/curl-8.5.0.tar.gz
)
FetchContent_MakeAvailable(curl)
endif()

if(BUILD_MASTER)
# OpenGL
find_package(OpenGL REQUIRED)

# OpenCV
find_package(OpenCV REQUIRED)
if(OpenCV_FOUND)
include_directories(${OpenCV_INCLUDE_DIRS})
if(WIN32)
set(SDL_RENDER_D3D OFF CACHE BOOL "" FORCE)
set(SDL_RENDER_D3D11 OFF CACHE BOOL "" FORCE)
set(SDL_RENDER_D3D12 OFF CACHE BOOL "" FORCE)
set(SDL_DIRECTX OFF CACHE BOOL "" FORCE)
set(CMAKE_DISABLE_PRECOMPILE_HEADERS ON CACHE BOOL "" FORCE)
endif()

# SDL3
find_package(SDL3 REQUIRED)
if (NOT SDL3_FOUND)
message(STATUS "Getting SDL3 from Github")
include(FetchContent)
FetchContent_Declare(
SDL3
GIT_REPOSITORY https://github.com/libsdl-org/SDL.git
GIT_TAG release-3.2.18
)
FetchContent_MakeAvailable(SDL3)
endif()
add_subdirectory(lib/SDL3 EXCLUDE_FROM_ALL)

# ImGui
set(IMGUI_DIR "lib/imgui")
Expand All @@ -63,34 +109,227 @@ if(BUILD_MASTER)
include_directories(${IMGUI_DIR})
include_directories(${IMGUI_DIR}/backends)
include_directories(lib/json/include)
endif()

# ============================================================
# OpenCV - Try system first, fallback to FetchContent
# ============================================================
find_package(OpenCV QUIET COMPONENTS core imgproc videoio imgcodecs)

if(OpenCV_FOUND)
message(STATUS "Using system OpenCV: ${OpenCV_VERSION}")
set(HAVE_OPENCV TRUE)
set(OPENCV_FROM_SOURCE FALSE)
else()
message(STATUS "System OpenCV not found, building from source...")

if(WIN32)
set(GSTREAMER_DIR "C:/Program Files/gstreamer/1.0/msvc_x86_64" CACHE PATH "GStreamer installation directory")

# Help CMake find GStreamer
list(APPEND CMAKE_PREFIX_PATH ${GSTREAMER_DIR})
set(ENV{PKG_CONFIG_PATH} "${GSTREAMER_DIR}/lib/pkgconfig")
set(ENV{GSTREAMER_ROOT_X86_64} ${GSTREAMER_DIR})

message(STATUS "GStreamer directory: ${GSTREAMER_DIR}")

# Verify GStreamer is installed
if(NOT EXISTS "${GSTREAMER_DIR}/lib/pkgconfig/gstreamer-1.0.pc")
message(WARNING "========================================")
message(WARNING "GStreamer NOT FOUND at ${GSTREAMER_DIR}!")
message(WARNING "Download from: https://gstreamer.freedesktop.org/download/")
message(WARNING "Install BOTH packages:")
message(WARNING " - gstreamer-1.0-msvc-x86_64-1.24.x.msi (runtime)")
message(WARNING " - gstreamer-1.0-devel-msvc-x86_64-1.24.x.msi (development)")
message(WARNING "========================================")
else()
message(STATUS "✓ GStreamer found at ${GSTREAMER_DIR}")
endif()
endif()

# -------------------------------------------------------
# Disable everything we don't need (faster build)
# -------------------------------------------------------
set(BUILD_LIST "core,imgproc,videoio,imgcodecs" CACHE STRING "" FORCE)

set(BUILD_EXAMPLES OFF CACHE BOOL "" FORCE)
set(BUILD_TESTS OFF CACHE BOOL "" FORCE)
set(BUILD_PERF_TESTS OFF CACHE BOOL "" FORCE)
set(BUILD_opencv_apps OFF CACHE BOOL "" FORCE)
set(BUILD_DOCS OFF CACHE BOOL "" FORCE)
set(BUILD_opencv_java OFF CACHE BOOL "" FORCE)
set(BUILD_opencv_python2 OFF CACHE BOOL "" FORCE)
set(BUILD_opencv_python3 OFF CACHE BOOL "" FORCE)
set(BUILD_PROTOBUF OFF CACHE BOOL "" FORCE)

set(WITH_CUDA OFF CACHE BOOL "" FORCE)
set(WITH_OPENCL OFF CACHE BOOL "" FORCE)
set(WITH_IPP OFF CACHE BOOL "" FORCE)
set(WITH_ITT OFF CACHE BOOL "" FORCE)
set(WITH_EIGEN OFF CACHE BOOL "" FORCE)
set(WITH_TBB OFF CACHE BOOL "" FORCE)
# Disable GUI toolkits
set(WITH_GTK OFF CACHE BOOL "" FORCE)
set(WITH_QT OFF CACHE BOOL "" FORCE)
set(WITH_WIN32UI OFF CACHE BOOL "" FORCE)
# Disable extra image formats
set(WITH_TIFF OFF CACHE BOOL "" FORCE)
set(WITH_WEBP OFF CACHE BOOL "" FORCE)
set(WITH_JASPER OFF CACHE BOOL "" FORCE)
set(WITH_OPENEXR OFF CACHE BOOL "" FORCE)
set(WITH_V4L OFF CACHE BOOL "" FORCE)

set(WITH_GSTREAMER ON CACHE BOOL "Enable GStreamer" FORCE)
set(WITH_GSTREAMER_0_10 OFF CACHE BOOL "Disable old GStreamer 0.10" FORCE)
set(WITH_FFMPEG ON CACHE BOOL "" FORCE)
set(WITH_JPEG OFF CACHE BOOL "" FORCE)
set(WITH_PNG OFF CACHE BOOL "" FORCE)

# Disable extra modules
set(BUILD_opencv_calib3d OFF CACHE BOOL "" FORCE)
set(BUILD_opencv_dnn OFF CACHE BOOL "" FORCE)
set(BUILD_opencv_features2d OFF CACHE BOOL "" FORCE)
set(BUILD_opencv_flann OFF CACHE BOOL "" FORCE)
set(BUILD_opencv_highgui OFF CACHE BOOL "" FORCE)
set(BUILD_opencv_ml OFF CACHE BOOL "" FORCE)
set(BUILD_opencv_photo OFF CACHE BOOL "" FORCE)
set(BUILD_opencv_stitching OFF CACHE BOOL "" FORCE)
set(BUILD_opencv_video OFF CACHE BOOL "" FORCE)
set(BUILD_opencv_videostab OFF CACHE BOOL "" FORCE)
set(BUILD_opencv_objdetect OFF CACHE BOOL "" FORCE)

# Must be OFF to match your global static override
set(BUILD_SHARED_LIBS OFF CACHE BOOL "" FORCE)

FetchContent_Declare(
opencv
GIT_REPOSITORY https://github.com/opencv/opencv.git
GIT_TAG 4.10.0
GIT_SHALLOW TRUE
GIT_PROGRESS TRUE
)

FetchContent_MakeAvailable(opencv)

set(HAVE_OPENCV TRUE)
set(OPENCV_FROM_SOURCE TRUE)

message(STATUS "OpenCV source dir: ${opencv_SOURCE_DIR}")
message(STATUS "OpenCV binary dir: ${opencv_BINARY_DIR}")
endif()
endif()

# --- Server Executable ---
if(BUILD_SERVER)
file(GLOB_RECURSE SERVER_SOURCE CONFIGURE_DEPENDS
"${CMAKE_SOURCE_DIR}/src/server/*.h"
"${CMAKE_SOURCE_DIR}/src/server/*.hpp"
"${CMAKE_SOURCE_DIR}/src/server/*.c"
"${CMAKE_SOURCE_DIR}/src/server/*.cpp"
)
link_directories(/usr/lib/aarch64-linux-gnu)
add_executable(server
src/server/main.cpp
src/server/GoProController.cpp
${SERVER_SOURCE}
${MDNS_SOURCES}
)
target_link_libraries(server hv)
if(WIN32)
target_compile_options(server PRIVATE "/std:c++17")
target_link_options(server PRIVATE "-static-libgcc" "-static-libstdc++" "-static")
endif()
target_link_libraries(server hv_static libcurl)
# Ensure json include is available for server too if it uses nlohmann/json
target_include_directories(server PRIVATE lib/json/include)
target_include_directories(server PRIVATE lib/json/include "${MDNS_DIR}/src" "${MDNS_DIR}/include")
endif()

# --- Master Executable ---
if(BUILD_MASTER)
file(GLOB_RECURSE MASTER_SOURCE CONFIGURE_DEPENDS
"${CMAKE_SOURCE_DIR}/src/master/*.h"
"${CMAKE_SOURCE_DIR}/src/master/*.hpp"
"${CMAKE_SOURCE_DIR}/src/master/*.c"
"${CMAKE_SOURCE_DIR}/src/master/*.cpp"
)
add_executable(master
src/master/main.cpp
src/master/GoProMaster.cpp
${MASTER_SOURCE}
lib/imgui/misc/cpp/imgui_stdlib.cpp
${IMGUI_SOURCES}
${MDNS_SOURCES}
)

target_link_libraries(master PRIVATE
OpenGL::GL
SDL3::SDL3
${OpenCV_LIBS}
hv
)
endif()
if (WIN32)
message(STATUS "Default WIN32 Build Master")

set(OPENCV_DIR "${CMAKE_SOURCE_DIR}/lib/opencv")
target_compile_options(master PRIVATE "/std:c++17")

set_property(TARGET master PROPERTY C_STANDARD 17)
set_property(TARGET master PROPERTY CXX_STANDARD 17)
set_property(TARGET master PROPERTY CXX_STANDARD_REQUIRED ON)
target_link_libraries(master PRIVATE
${OpenCV_LIBS}
opencv_core
opencv_imgproc
opencv_imgcodecs
opencv_videoio
OpenGL::GL
SDL3::SDL3
hv_static
libcurl
winpthread
)

target_include_directories(master PRIVATE
${opencv_SOURCE_DIR}/include
${opencv_BINARY_DIR}
${CMAKE_BINARY_DIR}
${opencv_BINARY_DIR}/opencv2
${opencv_SOURCE_DIR}/modules/core/include
${opencv_SOURCE_DIR}/modules/imgproc/include
${opencv_SOURCE_DIR}/modules/videoio/include
${opencv_SOURCE_DIR}/modules/imgcodecs/include
)

file(GLOB_RECURSE GSTREAM_DLL "${GSTREAMER_DIR}/bin/*.dll")
file(GLOB_RECURSE FONT_OTF "${CMAKE_SOURCE_DIR}/*.otf")

message(STATUS "Master will be built WITH OpenCV support")
add_custom_command(TARGET master POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy_if_different
${GSTREAM_DLL}
$<TARGET_FILE_DIR:master>
COMMENT "Copying gstreamer dll to output directory"
)
add_custom_command(TARGET master POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy_if_different
${FONT_OTF}
$<TARGET_FILE_DIR:master>
COMMENT "Copying Font to output directory"
)
target_link_options(master PRIVATE "-static-libgcc" "-static-libstdc++" "-static")
else()
target_compile_features(master PRIVATE cxx_std_17)
target_link_libraries(master PRIVATE
${OpenCV_LIBS}
OpenGL::GL
SDL3::SDL3
hv_static
libcurl
)
endif()
endif()

# ============================================================
# Summary
# ============================================================
message(STATUS "")
message(STATUS "========================================")
message(STATUS "GoPro Controller - Configuration")
message(STATUS "========================================")
message(STATUS "Build Server: ${BUILD_SERVER}")
message(STATUS "Build Master: ${BUILD_MASTER}")
if(BUILD_MASTER)
message(STATUS "OpenCV: ${HAVE_OPENCV} (from source)")
endif()
message(STATUS "========================================")
message(STATUS "")
message(STATUS "NOTE: First build may take 15-30 minutes (OpenCV compilation)")
message(STATUS "Subsequent builds will be much faster (cached)")
Loading