From 7c1c24f02044690dee605ffe8a46540060deab0c Mon Sep 17 00:00:00 2001 From: Ningyuan Li Date: Thu, 6 Feb 2025 11:20:35 +0900 Subject: [PATCH 1/2] supports PIXFMT_ARGB target --- src/unicapture.c | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/src/unicapture.c b/src/unicapture.c index 308a268..d771b83 100644 --- a/src/unicapture.c +++ b/src/unicapture.c @@ -187,12 +187,12 @@ void* unicapture_run(void* data) // Convert frame to suitable video formats if (ui_frame.pixel_format != PIXFMT_INVALID) { converter_run(&ui_converter, &ui_frame, &ui_frame_converted, - target_format == PIXFMT_RGB ? PIXFMT_ARGB : PIXFMT_YUV420_SEMI_PLANAR); + (target_format == PIXFMT_RGB || target_format == PIXFMT_ARGB) ? PIXFMT_ARGB : PIXFMT_YUV420_SEMI_PLANAR); } if (video_frame.pixel_format != PIXFMT_INVALID) { converter_run(&video_converter, &video_frame, &video_frame_converted, - target_format == PIXFMT_RGB ? PIXFMT_ARGB : PIXFMT_YUV420_SEMI_PLANAR); + (target_format == PIXFMT_RGB || target_format == PIXFMT_ARGB) ? PIXFMT_ARGB : PIXFMT_YUV420_SEMI_PLANAR); } uint64_t frame_converted = getticks_us(); @@ -204,7 +204,7 @@ void* unicapture_run(void* data) const int width = video_frame_converted.width; const int height = video_frame_converted.height; - if (target_format == PIXFMT_RGB) { + if (target_format == PIXFMT_RGB || target_format == PIXFMT_ARGB) { blended_frame.planes[0].buffer = realloc(blended_frame.planes[0].buffer, width * height * 4); blended_frame.planes[0].stride = width * 4; blended_frame.pixel_format = PIXFMT_ARGB; @@ -266,6 +266,8 @@ void* unicapture_run(void* data) FILE* fd = fopen(filename, "wb"); if (target_format == PIXFMT_RGB) fwrite(final_frame.planes[0].buffer, 3 * final_frame.width * final_frame.height, 1, fd); + if (target_format == PIXFMT_ARGB) + fwrite(final_frame.planes[0].buffer, 4 * final_frame.width * final_frame.height, 1, fd); if (target_format == PIXFMT_YUV420_SEMI_PLANAR) { fwrite(final_frame.planes[0].buffer, final_frame.width * final_frame.height, 1, fd); fwrite(final_frame.planes[1].buffer, final_frame.width * final_frame.height / 2, 1, fd); @@ -274,7 +276,7 @@ void* unicapture_run(void* data) INFO("Buffer dumped to: %s", filename); } - if (this->callback != NULL && target_format == PIXFMT_RGB) { + if (this->callback != NULL && (target_format == PIXFMT_RGB || target_format == PIXFMT_ARGB)) { this->callback(this->callback_data, final_frame.width, final_frame.height, final_frame.planes[0].buffer); } From 177e8cf21b09fed98843e411a6301aadaea37846 Mon Sep 17 00:00:00 2001 From: Ningyuan Li Date: Thu, 6 Feb 2025 11:51:25 +0900 Subject: [PATCH 2/2] moved unicapture to a separate directory --- CMakeLists.txt | 37 ++---------------- unicapture/CMakeLists.txt | 39 +++++++++++++++++++ {src => unicapture}/backends/libdile_vt.c | 0 {src => unicapture}/backends/libgm.c | 0 {src => unicapture}/backends/libhalgal.c | 0 {src => unicapture}/backends/libvtcapture.cpp | 0 {src => unicapture}/common.h | 0 {src => unicapture}/converter.c | 0 {src => unicapture}/converter.h | 0 {src => unicapture}/unicapture.c | 0 {src => unicapture}/unicapture.h | 0 11 files changed, 42 insertions(+), 34 deletions(-) create mode 100644 unicapture/CMakeLists.txt rename {src => unicapture}/backends/libdile_vt.c (100%) rename {src => unicapture}/backends/libgm.c (100%) rename {src => unicapture}/backends/libhalgal.c (100%) rename {src => unicapture}/backends/libvtcapture.cpp (100%) rename {src => unicapture}/common.h (100%) rename {src => unicapture}/converter.c (100%) rename {src => unicapture}/converter.h (100%) rename {src => unicapture}/unicapture.c (100%) rename {src => unicapture}/unicapture.h (100%) diff --git a/CMakeLists.txt b/CMakeLists.txt index e1e9960..61d805f 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -35,6 +35,7 @@ include_directories(${LS2_INCLUDE_DIRS}) pkg_check_modules(PMLOG REQUIRED PmLogLib) include_directories(${PMLOG_INCLUDE_DIRS}) +add_subdirectory(unicapture) find_package(Git) add_custom_target(version @@ -48,8 +49,6 @@ add_executable(hyperion-webos src/main.c src/settings.c src/service.c - src/unicapture.c - src/converter.c src/log.c src/utils.c src/hyperion_client.c @@ -63,36 +62,6 @@ set_target_properties(hyperion-webos PROPERTIES # LINK_FLAGS "-Wl,-rpath,'$ORIGIN:$ORIGIN/lib' -Wl,-z,origin" ) target_include_directories(hyperion-webos PRIVATE ${CMAKE_BINARY_DIR}) -target_link_libraries(hyperion-webos fbs flatccrt pthread dl yuv rt ${GTHREAD2_LDFLAGS} ${PBNJSON_LDFLAGS} ${LS2_LDFLAGS} ${GLIB2_LDFLAGS} ${PMLOG_LDFLAGS}) -add_dependencies(hyperion-webos version gm_backend dile_vt_backend halgal_backend vtcapture_backend) +target_link_libraries(hyperion-webos fbs flatccrt pthread dl unicapture rt ${GTHREAD2_LDFLAGS} ${PBNJSON_LDFLAGS} ${LS2_LDFLAGS} ${GLIB2_LDFLAGS} ${PMLOG_LDFLAGS}) +add_dependencies(hyperion-webos version) set_property(TARGET hyperion-webos PROPERTY ENABLE_EXPORTS 1) - -# "Unified" v2 Backends -add_library(gm_backend SHARED - src/backends/libgm.c -) -target_include_directories(gm_backend PRIVATE src src/backends) -target_link_libraries(gm_backend gm) - -add_library(dile_vt_backend SHARED - src/backends/libdile_vt.c -) -target_include_directories(dile_vt_backend PRIVATE src src/backends) -target_link_libraries(dile_vt_backend dile_vt) - -# libdile_vt.so seems to be missing DT_NEEDED for libPmLogLib.so.3 - let's just -# add it over to our library. For some reason adding PmLogLib loaded via -# pkgconfig to target_link_libraries doesn't work... -set_target_properties(dile_vt_backend PROPERTIES LINK_FLAGS "-lPmLogLib") - -add_library(halgal_backend SHARED - src/backends/libhalgal.c -) -target_include_directories(halgal_backend PRIVATE src src/backends) -target_link_libraries(halgal_backend halgal) - -add_library(vtcapture_backend SHARED - src/backends/libvtcapture.cpp -) -target_include_directories(vtcapture_backend PRIVATE src src/backends) -target_link_libraries(vtcapture_backend vtcapture) diff --git a/unicapture/CMakeLists.txt b/unicapture/CMakeLists.txt new file mode 100644 index 0000000..5c8948d --- /dev/null +++ b/unicapture/CMakeLists.txt @@ -0,0 +1,39 @@ +add_library(unicapture STATIC + unicapture.c + converter.c +) +set(UNICAPTURE_INCLUDE_DIRS ${CMAKE_CURRENT_SOURCE_DIR} "${CMAKE_CURRENT_SOURCE_DIR}/../src") +target_include_directories(unicapture PUBLIC ${UNICAPTURE_INCLUDE_DIRS}) +target_link_libraries(unicapture PUBLIC yuv) + +# "Unified" v2 Backends +add_library(gm_backend SHARED + backends/libgm.c +) +target_include_directories(gm_backend PRIVATE ${UNICAPTURE_INCLUDE_DIRS} backends) +target_link_libraries(gm_backend gm) + +add_library(dile_vt_backend SHARED + backends/libdile_vt.c +) +target_include_directories(dile_vt_backend PRIVATE ${UNICAPTURE_INCLUDE_DIRS} backends) +target_link_libraries(dile_vt_backend dile_vt) + +# libdile_vt.so seems to be missing DT_NEEDED for libPmLogLib.so.3 - let's just +# add it over to our library. For some reason adding PmLogLib loaded via +# pkgconfig to target_link_libraries doesn't work... +set_target_properties(dile_vt_backend PROPERTIES LINK_FLAGS "-lPmLogLib") + +add_library(halgal_backend SHARED + backends/libhalgal.c +) +target_include_directories(halgal_backend PRIVATE ${UNICAPTURE_INCLUDE_DIRS} backends) +target_link_libraries(halgal_backend halgal) + +add_library(vtcapture_backend SHARED + backends/libvtcapture.cpp +) +target_include_directories(vtcapture_backend PRIVATE ${UNICAPTURE_INCLUDE_DIRS} backends) +target_link_libraries(vtcapture_backend vtcapture) + +add_dependencies(unicapture gm_backend dile_vt_backend halgal_backend vtcapture_backend) diff --git a/src/backends/libdile_vt.c b/unicapture/backends/libdile_vt.c similarity index 100% rename from src/backends/libdile_vt.c rename to unicapture/backends/libdile_vt.c diff --git a/src/backends/libgm.c b/unicapture/backends/libgm.c similarity index 100% rename from src/backends/libgm.c rename to unicapture/backends/libgm.c diff --git a/src/backends/libhalgal.c b/unicapture/backends/libhalgal.c similarity index 100% rename from src/backends/libhalgal.c rename to unicapture/backends/libhalgal.c diff --git a/src/backends/libvtcapture.cpp b/unicapture/backends/libvtcapture.cpp similarity index 100% rename from src/backends/libvtcapture.cpp rename to unicapture/backends/libvtcapture.cpp diff --git a/src/common.h b/unicapture/common.h similarity index 100% rename from src/common.h rename to unicapture/common.h diff --git a/src/converter.c b/unicapture/converter.c similarity index 100% rename from src/converter.c rename to unicapture/converter.c diff --git a/src/converter.h b/unicapture/converter.h similarity index 100% rename from src/converter.h rename to unicapture/converter.h diff --git a/src/unicapture.c b/unicapture/unicapture.c similarity index 100% rename from src/unicapture.c rename to unicapture/unicapture.c diff --git a/src/unicapture.h b/unicapture/unicapture.h similarity index 100% rename from src/unicapture.h rename to unicapture/unicapture.h