cmake_minimum_required(VERSION 3.16) project(framecache C) set(CMAKE_C_STANDARD 11) set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall -Wextra -O2") # ── libmicrohttpd ──────────────────────────────────────────────────── find_library(MHD_LIB microhttpd REQUIRED) find_path(MHD_INCLUDE microhttpd.h REQUIRED) include_directories(${MHD_INCLUDE}) # ── framecache server ──────────────────────────────────────────────── add_executable(framecache src/framecache.c src/slot.c src/registry.c ) target_link_libraries(framecache ${MHD_LIB} rt pthread) # ── fc_client static library (used by bridges + test) ─────────────── add_library(fc_client STATIC client/fc_client.c src/slot.c # client needs fc_slot_shm_size / fc_frame_at ) target_include_directories(fc_client PUBLIC src client) target_link_libraries(fc_client rt pthread) # ── net_ingest — network source (RTMP/SRT) → framecache slot ───────── # Spawned by node-agent when a network recorder starts. # Decodes the network stream to raw UYVY422 via ffmpeg and writes frames # into a framecache slot, giving capture-manager the same fc_pipe consumer # interface as SDI sources. add_executable(net_ingest src/net_ingest.c src/slot.c ) target_include_directories(net_ingest PRIVATE src) target_link_libraries(net_ingest rt pthread) install(TARGETS net_ingest DESTINATION bin) # ── fc_pipe — slot → stdout adapter (used by capture-manager.js) ───── # Spawned by capture-manager as a child process; writes raw UYVY422 # frames from a framecache slot to stdout so ffmpeg reads them as # rawvideo pipe input. Multiple fc_pipe instances on the same slot # each get an independent cursor — zero-copy fan-out. add_executable(fc_pipe client/fc_pipe.c ) target_link_libraries(fc_pipe fc_client) target_include_directories(fc_pipe PRIVATE src client) # ── test consumer (dev utility) ────────────────────────────────────── if(BUILD_TESTS) add_executable(fc_test_consumer client/fc_test_consumer.c ) target_link_libraries(fc_test_consumer fc_client) target_include_directories(fc_test_consumer PRIVATE src client) endif() install(TARGETS framecache fc_pipe DESTINATION bin) install(FILES client/fc_client.h src/slot.h DESTINATION include/framecache) install(TARGETS fc_client DESTINATION lib)