jcsyshc 2 роки тому
батько
коміт
6c18c075fb
8 змінених файлів з 61 додано та 31 видалено
  1. 16 4
      CMakeLists.txt
  2. 2 2
      src/cuda_helper.hpp
  3. 1 0
      src/frame_sender.cpp
  4. 1 12
      src/main.cpp
  5. 14 0
      src/sophiar_connect.cpp
  6. 13 12
      src/third_party/rs.c
  7. 13 1
      src/video_encoder.cpp
  8. 1 0
      src/video_encoder.h

+ 16 - 4
CMakeLists.txt

@@ -54,6 +54,12 @@ target_sources(${PROJECT_NAME} PRIVATE
         ${IMGUI_BACKENDS_DIR}/imgui_impl_opengl3.cpp)
 target_compile_definitions(${PROJECT_NAME} PRIVATE HAVE_IMGUI)
 
+# fmt config
+if (NOT WIN32)
+    find_package(fmt REQUIRED)
+    target_link_libraries(${PROJECT_NAME} fmt::fmt)
+endif ()
+
 # spdlog config
 find_package(spdlog REQUIRED)
 target_link_libraries(${PROJECT_NAME} spdlog::spdlog)
@@ -125,7 +131,13 @@ target_link_libraries(${PROJECT_NAME} ${NVENC_LIB})
 target_sources(${PROJECT_NAME} PRIVATE src/video_encoder.cpp)
 
 # xxHash config
-set(XXHASH_INCLUDE_DIR /usr/include)
-find_library(XXHASH_LIB xxhash)
-target_include_directories(${PROJECT_NAME} PRIVATE ${XXHASH_INCLUDE_DIR})
-target_link_libraries(${PROJECT_NAME} ${XXHASH_LIB})
+if (WIN32)
+    set(XXHASH_DIR C:/BuildEssentials/Library/xxHash-0.8.1/Source)
+    target_include_directories(${PROJECT_NAME} PRIVATE ${XXHASH_DIR})
+    target_sources(${PROJECT_NAME} PRIVATE ${XXHASH_DIR}/xxhash.c)
+else ()
+    set(XXHASH_INCLUDE_DIR /usr/include)
+    find_library(XXHASH_LIB xxhash)
+    target_include_directories(${PROJECT_NAME} PRIVATE ${XXHASH_INCLUDE_DIR})
+    target_link_libraries(${PROJECT_NAME} ${XXHASH_LIB})
+endif ()

+ 2 - 2
src/cuda_helper.hpp

@@ -16,7 +16,7 @@ inline bool check_cuda_api_call(CUresult api_ret, unsigned int line_number,
     if (ret != CUDA_SUCCESS) [[unlikely]] error_str = "Unknown";
     SPDLOG_ERROR("CUDA api call {} failed at {}:{} with error 0x{:x}:{}, {}.",
                  api_call_str, file_name, line_number,
-                 api_ret, error_name, error_str);
+                 (int) api_ret, error_name, error_str);
     RET_ERROR;
 }
 
@@ -24,7 +24,7 @@ inline bool check_cuda_api_call(cudaError api_ret, unsigned int line_number,
                                 const char *file_name, const char *api_call_str) {
     if (api_ret == cudaSuccess) [[likely]] return true;
     SPDLOG_ERROR("CUDA api call {} failed at {}:{} with error 0x{:x}.",
-                 api_call_str, file_name, line_number, api_ret);
+                 api_call_str, file_name, line_number, (int) api_ret);
     RET_ERROR;
 }
 

+ 1 - 0
src/frame_sender.cpp

@@ -26,6 +26,7 @@ extern "C" {
 
 #include <cstdint>
 #include <deque>
+#include <numeric>
 #include <random>
 #include <thread>
 #include <tuple>

+ 1 - 12
src/main.cpp

@@ -30,17 +30,6 @@
 #include <cassert>
 #include <cstdlib>
 
-// for debug;
-#include <ndi/CombinedApi.h>
-
-// for debug;
-Eigen::Isometry3d port_info_to_transform(const Transform &info) {
-    using namespace Eigen;
-    auto translate = Translation3d(info.tx, info.ty, info.tz);
-    auto rotation = Quaterniond(info.q0, info.qx, info.qy, info.qz);
-    return translate * rotation;
-}
-
 using boost::iostreams::mapped_file;
 
 CUcontext cuda_ctx;
@@ -182,7 +171,7 @@ int main() {
             encoder.stop_encode();
         }
 
-        ImGui::ShowDemoWindow();
+//        ImGui::ShowDemoWindow();
 
         if (ImGui::Begin("Remote AR Control")) {
             ImGui::PushItemWidth(200);

+ 14 - 0
src/sophiar_connect.cpp

@@ -10,6 +10,20 @@
 
 #include <spdlog/spdlog.h>
 
+#include <boost/predef.h>
+
+#ifdef BOOST_OS_WINDOWS_AVAILABLE
+
+#include <format>
+
+#define fmt std
+
+#else
+
+#include <fmt/format.h>
+
+#endif
+
 #include <charconv>
 #include <bit>
 #include <variant>

+ 13 - 12
src/third_party/rs.c

@@ -169,13 +169,7 @@ modnn(int x)
  * A value related to the multiplication is held in a local variable
  * declared with USE_GF_MULC . See usage in addmul1().
  */
-static gf gf_mul_table[(GF_SIZE + 1)*(GF_SIZE + 1)]
-#ifdef WINDOWS
-        __attribute__((aligned (16)))
-#else
-        __attribute__((aligned (256)))
-#endif
-;
+__declspec(align(16)) static gf gf_mul_table[(GF_SIZE + 1)*(GF_SIZE + 1)];
 
 #define gf_mul(x,y) gf_mul_table[(x<<8)+y]
 
@@ -415,10 +409,14 @@ invert_mat(gf *src, int k)
     int irow, icol, row, col, i, ix ;
 
     int error = 1 ;
-    int indxc[k];
-    int indxr[k];
-    int ipiv[k];
-    gf id_row[k];
+    int *indxc = malloc(k*sizeof(int));
+    int *indxr = malloc(k*sizeof(int));
+    int *ipiv = malloc(k*sizeof(int));
+    gf *id_row = malloc(k*sizeof(gf));
+//    int indxc[k];
+//    int indxr[k];
+//    int ipiv[k];
+//    gf id_row[k];
 
     memset(id_row, 0, k*sizeof(gf));
     DEB( pivloops=0; pivswaps=0 ; /* diagnostic */ )
@@ -525,6 +523,10 @@ invert_mat(gf *src, int k)
     }
     error = 0 ;
     fail:
+    free(indxc);
+    free(indxr);
+    free(ipiv);
+    free(id_row);
     return error ;
 }
 
@@ -988,4 +990,3 @@ int reed_solomon_reconstruct(reed_solomon* rs,
 
     return err;
 }
-

+ 13 - 1
src/video_encoder.cpp

@@ -4,16 +4,28 @@
 
 #include <nvEncodeAPI.h>
 
+#include <boost/predef.h>
+
+#ifdef BOOST_OS_WINDOWS_AVAILABLE
+
+#include <format>
+
+#define fmt std
+
+#else
+
 #include <fmt/chrono.h>
 #include <fmt/format.h>
 
+#endif
+
 #include <cstdio>
 
 bool check_nvenc_api_call(NVENCSTATUS api_ret, unsigned int line_number,
                           const char *file_name, const char *api_call_str) {
     if (api_ret == NV_ENC_SUCCESS) [[likely]] return true;
     SPDLOG_ERROR("NvEnc api call {} failed at {}:{} with error 0x{:x}.",
-                 api_call_str, file_name, line_number, api_ret);
+                 api_call_str, file_name, line_number, (int) api_ret);
     RET_ERROR;
 }
 

+ 1 - 0
src/video_encoder.h

@@ -1,6 +1,7 @@
 #ifndef REMOTEAR2_VIDEO_ENCODER_H
 #define REMOTEAR2_VIDEO_ENCODER_H
 
+#include <glad/gl.h> // make windows happy
 #include <cuda_gl_interop.h>
 
 #include <memory>