Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
38 commits
Select commit Hold shift + click to select a range
3dfe42b
Move everything to CMake drive build
Sean-Der Apr 8, 2020
854d854
Add MacOS version check in CMake
disa6302 Apr 17, 2020
986713d
Build automake/autoconf instead of making user install
Sean-Der Apr 27, 2020
0b8a673
Update openssl version to 1.1.1g
disa6302 May 4, 2020
c54e0ef
Updating CPP producer to latest C producer and PIC (#443)
MushMal May 7, 2020
87cd5b9
Support building on Windows
Sean-Der Apr 29, 2020
45b8ba8
Add a file uploader example
lherman-cs May 6, 2020
2d59faf
Shorten sample prefix
lherman-cs May 7, 2020
4aa2789
Build GStreamer in Windows CI
Sean-Der May 13, 2020
c4a0aa8
Fix cmake files
disa6302 Jun 9, 2020
f39fb58
update PIC and producer hook. Enable build_denpendencies=OFF
chehefen Jun 15, 2020
e5f1bcd
pull c producer and build with add_subdirectory
chehefen Jun 22, 2020
d787845
Replace CMAKE_SOURCE_DIR with CMAKE_CURRENT_SOURCE_DIR (#531)
MushMal Jul 30, 2020
da9c76f
Replace CMAKE_SOURCE_DIR with CMAKE_CURRENT_SOURCE_DIR (#528)
lummish Jul 30, 2020
a702382
update c producer
chehefen Aug 13, 2020
4504746
update c producer to pull in find curl fix for older cmake
chehefen Aug 14, 2020
d619528
Intermittent producer test scenarios (#584)
MushMal Oct 9, 2020
0c71da9
Bug fix: JNI incorrectly is using stopStreamTimeout for createStreamT…
MushMal Nov 19, 2020
de40cc0
update producer-c version to support automatic intermittent producer …
hassanctech Jan 12, 2021
b8dda10
Updating to the latest C producer (#647)
MushMal Jan 28, 2021
5f281fe
Rebase latest cproducer (#649)
MushMal Feb 2, 2021
a10cc91
fix producer cpp set correct default for intermittent producer scenar…
hassanctech Feb 10, 2021
b4b8285
Updating CProducer to latest. Add constructor overloads. Add test cov…
MushMal Feb 17, 2021
fd7c4bf
Pull in frame rate changes from PIC and correct documentation
disa6302 Mar 18, 2021
d05666e
update producer c to include e2e frame latency reduction (#694)
hassanctech Apr 22, 2021
d4989d6
update producer c ref (#726)
hassanctech Jul 19, 2021
59c1fb5
Duplicate event fix for master (#838)
jdelapla Mar 27, 2022
46209b1
Release 3 3 1 (#865)
jdelapla May 21, 2022
306cba1
Release 3.4.0 (#1041)
hassanctech Aug 25, 2023
ec36ddc
Release 3.4.1 (#1055)
disa6302 Sep 5, 2023
cf59919
Update CI tests (#1165)
stefankiesz Apr 19, 2024
07671ce
Release v3.4.2 (#1207)
sirknightj Oct 10, 2024
ca758fc
Remove Unused Dependency Files
stefankiesz Jan 7, 2025
0618972
JNI: Fix logging cleanup issue (#1239)
sirknightj Mar 18, 2025
0981fc2
JNI Builds Enhancements & CMake Dependency Enhancements (#1237)
sirknightj Mar 18, 2025
9909c48
Pin cmake to v3 (#1247)
sirknightj Apr 16, 2025
15870b2
Merge remote-tracking branch 'producer-java-sdk/add-jni-from-cpp-sdk'…
sirknightj May 15, 2025
43b9bd3
Delete the extra stuff, adjust the CI to use the local JNI, CMake enh…
sirknightj May 16, 2025
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
29 changes: 6 additions & 23 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -59,11 +59,9 @@ jobs:
- name: Build JNI (Mac and Linux)
if: ${{ runner.os == 'macOS' || runner.os == 'linux' }}
run: |
git clone https://github.com/awslabs/amazon-kinesis-video-streams-producer-sdk-cpp.git --single-branch -b ${{ env.BRANCH_NAME }}
cd amazon-kinesis-video-streams-producer-sdk-cpp
mkdir build
cd build
cmake .. -DBUILD_JNI_ONLY=ON
cmake ..
make -j

- name: Build JNI (Windows)
Expand All @@ -72,42 +70,27 @@ jobs:
run: |
@echo on

:: Create a shorter directory to avoid long path issues
mkdir D:\work || exit /b 1
git clone https://github.com/awslabs/amazon-kinesis-video-streams-producer-sdk-cpp.git D:\work\producer --single-branch -b ${{ env.BRANCH_NAME }} || exit /b 1

:: Ensure cloning succeeded
if not exist "D:\work\producer" (
echo "Error: Clone failed, directory does not exist."
exit /b 1
)

cd D:\work\producer || exit /b 1

:: Create build directory
mkdir build || exit /b 1
cd build || exit /b 1

:: Run CMake with the correct path
cmake .. -DBUILD_JNI_ONLY=ON -G "Visual Studio 17 2022" || exit /b 1
cmake .. -G "Visual Studio 17 2022" || exit /b 1
cmake --build . --config Release --verbose || exit /b 1

:: Move the compiled library to the expected location
:: Note: Using Visual Studio generator, the output file gets put in Release\KinesisVideoProducerJNI.dll
:: rather than in the build folder directly
cd "%GITHUB_WORKSPACE%" || exit /b 1
mkdir amazon-kinesis-video-streams-producer-sdk-cpp || exit /b 1
mkdir amazon-kinesis-video-streams-producer-sdk-cpp\build || exit /b 1
move D:\work\producer\build\Release\KinesisVideoProducerJNI.dll amazon-kinesis-video-streams-producer-sdk-cpp\build || exit /b 1
move Release\KinesisVideoProducerJNI.dll . || exit /b 1

- name: Upload JNI Library
uses: actions/upload-artifact@v4
with:
name: jni-library-${{ matrix.platform.name }}
path: |
amazon-kinesis-video-streams-producer-sdk-cpp/build/libKinesisVideoProducerJNI.so
amazon-kinesis-video-streams-producer-sdk-cpp/build/libKinesisVideoProducerJNI.dylib
amazon-kinesis-video-streams-producer-sdk-cpp/build/KinesisVideoProducerJNI.dll
build/libKinesisVideoProducerJNI.so
build/libKinesisVideoProducerJNI.dylib
build/KinesisVideoProducerJNI.dll
retention-days: 1

run-unit-tests:
Expand Down
2 changes: 1 addition & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -11,4 +11,4 @@ cm-file
target
logs
hs_err_pid*.log

dependency/
19 changes: 19 additions & 0 deletions CMake/Dependencies/libkvspic-CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
cmake_minimum_required(VERSION 3.6.3)

project(libkvspic-download LANGUAGES C)

include(ExternalProject)

ExternalProject_Add(libkvspic-download
GIT_REPOSITORY https://github.com/awslabs/amazon-kinesis-video-streams-pic.git
GIT_TAG v1.2.0
GIT_SHALLOW TRUE
GIT_PROGRESS TRUE
SOURCE_DIR "${CMAKE_CURRENT_BINARY_DIR}/kvspic-src"
BINARY_DIR "${CMAKE_CURRENT_BINARY_DIR}/kvspic-build"
CMAKE_ARGS -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE} -DBUILD_DEPENDENCIES=OFF
CONFIGURE_COMMAND ""
BUILD_COMMAND ""
INSTALL_COMMAND ""
TEST_COMMAND ""
)
42 changes: 42 additions & 0 deletions CMake/Utilities.cmake
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
# only fetch target repo for add_subdirectory later
function(fetch_repo lib_name)
set(supported_libs
kvspic)
list(FIND supported_libs ${lib_name} index)
if(${index} EQUAL -1)
message(WARNING "${lib_name} is not supported for fetch_repo")
return()
endif()

if (WIN32 OR NOT PARALLEL_BUILD)
set(PARALLEL_BUILD "") # No parallel build for Windows
else()
set(PARALLEL_BUILD "--parallel") # Enable parallel builds for Unix-like systems
endif()

# build library
configure_file(
./CMake/Dependencies/lib${lib_name}-CMakeLists.txt
${DEPENDENCY_DOWNLOAD_PATH}/lib${lib_name}/CMakeLists.txt COPYONLY)
execute_process(
COMMAND ${CMAKE_COMMAND}
${CMAKE_GENERATOR} .
RESULT_VARIABLE result
WORKING_DIRECTORY ${DEPENDENCY_DOWNLOAD_PATH}/lib${lib_name})
if(result)
message(FATAL_ERROR "CMake step for lib${lib_name} failed: ${result}")
endif()
execute_process(
COMMAND ${CMAKE_COMMAND} --build . ${PARALLEL_BUILD}
RESULT_VARIABLE result
WORKING_DIRECTORY ${DEPENDENCY_DOWNLOAD_PATH}/lib${lib_name})
if(result)
message(FATAL_ERROR "CMake step for lib${lib_name} failed: ${result}")
endif()
endfunction()

function(enableSanitizer SANITIZER)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -O0 -g -fsanitize=${SANITIZER} -fno-omit-frame-pointer" PARENT_SCOPE)
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -O0 -g -fsanitize=${SANITIZER} -fno-omit-frame-pointer -fno-optimize-sibling-calls" PARENT_SCOPE)
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -fsanitize=${SANITIZER}" PARENT_SCOPE)
endfunction()
86 changes: 86 additions & 0 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,86 @@
cmake_minimum_required(VERSION 3.6.3)

set(CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/CMake;${CMAKE_MODULE_PATH}")
include(Utilities)

project(KinesisVideoProducerJNI VERSION 3.4.2)

set(CMAKE_CXX_STANDARD 11)
include(GNUInstallDirs)

add_definitions(-DCPP_VERSION_STRING=\"${PROJECT_VERSION}\")

set(CMAKE_MACOSX_RPATH TRUE)

############# Check dependencies ############

find_package(Threads)

find_package(JNI QUIET)
if(NOT JNI_FOUND)
message(FATAL_ERROR
"\nJava Development Kit (JDK) not found!"
"\nPlease ensure that:"
"\n 1. JDK is installed"
"\n 2. JAVA_HOME environment variable is set correctly"
"\n 3. Your JDK installation includes JNI headers"
)
endif()
include_directories(${JNI_INCLUDE_DIRS})

############# Enable Sanitizers ############
if(${CMAKE_C_COMPILER_ID} MATCHES "GNU|Clang")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fPIC")

if(ADD_MUCLIBC)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -muclibc")
endif()

if(CODE_COVERAGE)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -O0 -g -fprofile-arcs -ftest-coverage")
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} --coverage")
endif()

if(ADDRESS_SANITIZER)
enableSanitizer("address")
endif()
if(MEMORY_SANITIZER)
enableSanitizer("memory")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize-memory-track-origins")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize-memory-track-origins")
endif()
if(THREAD_SANITIZER)
enableSanitizer("thread")
endif()
if(UNDEFINED_BEHAVIOR_SANITIZER)
enableSanitizer("undefined")
endif()
endif()

if(MSVC)
add_definitions(-D_CRT_SECURE_NO_WARNINGS -D_CRT_NONSTDC_NO_WARNINGS -D_SILENCE_TR1_NAMESPACE_DEPRECATION_WARNING)
endif()

############# Build Targets ############

# PIC
set(DEPENDENCY_DOWNLOAD_PATH ${CMAKE_CURRENT_SOURCE_DIR}/dependency)
set(BUILD_ARGS -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE})
fetch_repo(kvspic ${BUILD_ARGS})
add_subdirectory("${DEPENDENCY_DOWNLOAD_PATH}/libkvspic/kvspic-src")
file(GLOB PIC_HEADERS "${pic_project_SOURCE_DIR}/src/*/include")
include_directories("${PIC_HEADERS}")

# JNI
file(GLOB_RECURSE JNI_SOURCE_FILES "jni/*.cpp")
include_directories(${CMAKE_CURRENT_SOURCE_DIR}/jni/include)

add_library(KinesisVideoProducerJNI SHARED ${JNI_HEADERS} ${JNI_SOURCE_FILES})
target_link_libraries(KinesisVideoProducerJNI kvspic)

add_custom_target(clean-all
COMMENT "Removing all build and dependency directories"
COMMAND ${CMAKE_COMMAND} -E remove_directory ${CMAKE_BINARY_DIR}
COMMAND ${CMAKE_COMMAND} -E remove_directory ${DEPENDENCY_DOWNLOAD_PATH}
COMMENT "Removed the build and dependency directories"
)
Loading
Loading