Skip to content

Commit

Permalink
gstreamer: first try for a basic gst backend
Browse files Browse the repository at this point in the history
  • Loading branch information
jcelerier committed Jan 14, 2025
1 parent bc81cfd commit ef25590
Show file tree
Hide file tree
Showing 6 changed files with 538 additions and 3 deletions.
4 changes: 3 additions & 1 deletion cmake/avendish.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ set(CMAKE_POSITION_INDEPENDENT_CODE ON)
set(AVND_SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}")
set(AVND_SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}" CACHE INTERNAL "")

find_package(Boost QUIET REQUIRED)
find_package(Boost 1.87 QUIET REQUIRED)
find_package(Threads QUIET)
find_package(fmt QUIET)

Expand Down Expand Up @@ -131,6 +131,7 @@ include(avendish.tools)
include(avendish.ui.qt)
include(avendish.dump)
include(avendish.max)
include(avendish.gstreamer)
include(avendish.pd)
include(avendish.python)
include(avendish.vintage)
Expand Down Expand Up @@ -191,6 +192,7 @@ function(avnd_make_all)
avnd_make_example_host(${ARGV})
avnd_make_object(${ARGV})
avnd_make_audioplug(${ARGV})
avnd_make_gstreamer(${ARGV})
endfunction()

function(avnd_make)
Expand Down
96 changes: 96 additions & 0 deletions cmake/avendish.gstreamer.cmake
Original file line number Diff line number Diff line change
@@ -0,0 +1,96 @@
find_package(PkgConfig REQUIRED)
pkg_check_modules(Gstreamer REQUIRED IMPORTED_TARGET GLOBAL
gobject-2.0
glib-2.0
gstreamer-sdp-1.0
gstreamer-pbutils-1.0
libsoup-2.4
json-glib-1.0
gstreamer-check-1.0)

if(NOT GSTLIBS_FOUND)
message(FATAL_ERROR fuck u)
function(avnd_make_gstreamer)
endfunction()
return()
endif()
# Define a PCH
add_library(Avendish_gstreamer_pch STATIC "${AVND_SOURCE_DIR}/src/dummy.cpp")

target_precompile_headers(Avendish_gstreamer_pch
PUBLIC
# include/avnd/binding/gstreamer/element.hpp
include/avnd/prefix.hpp
)

target_link_libraries(Avendish_gstreamer_pch
PUBLIC
DisableExceptions
PkgConfig::Gstreamer
)

avnd_common_setup("" "Avendish_gstreamer_pch")

function(avnd_make_gstreamer)
cmake_parse_arguments(AVND "" "TARGET;MAIN_FILE;MAIN_CLASS;C_NAME" "" ${ARGN})

string(MAKE_C_IDENTIFIER "${AVND_MAIN_CLASS}" MAIN_OUT_FILE)

configure_file(
"${AVND_SOURCE_DIR}/include/avnd/binding/gstreamer/prototype.cpp.in"
"${CMAKE_BINARY_DIR}/${MAIN_OUT_FILE}_gstreamer.cpp"
@ONLY
NEWLINE_STYLE LF
)

set(AVND_FX_TARGET "${AVND_TARGET}_gstreamer")
add_library(${AVND_FX_TARGET} MODULE)

set_target_properties(
${AVND_FX_TARGET}
PROPERTIES
OUTPUT_NAME "${AVND_C_NAME}"
LIBRARY_OUTPUT_DIRECTORY gstreamer
RUNTIME_OUTPUT_DIRECTORY gstreamer
)

target_sources(
${AVND_FX_TARGET}
PRIVATE
"${AVND_MAIN_FILE}"
"${CMAKE_BINARY_DIR}/${MAIN_OUT_FILE}_gstreamer.cpp"
)

target_compile_definitions(
${AVND_FX_TARGET}
PRIVATE
AVND_GSTREAMER=1
)

if(NOT MSVC)
target_precompile_headers(${AVND_FX_TARGET}
REUSE_FROM
Avendish_gstreamer_pch
)
endif()

target_link_libraries(
${AVND_FX_TARGET}
PUBLIC
DisableExceptions
PUBLIC
Avendish::Avendish_gstreamer
PkgConfig::Gstreamer
)

target_link_libraries(${AVND_FX_TARGET} PRIVATE ${GSTREAMER_LIB})
avnd_common_setup("${AVND_TARGET}" "${AVND_FX_TARGET}")
endfunction()

add_library(Avendish_gstreamer INTERFACE)
target_link_libraries(Avendish_gstreamer INTERFACE Avendish)
add_library(Avendish::Avendish_gstreamer ALIAS Avendish_gstreamer)

target_sources(Avendish PRIVATE
"${AVND_SOURCE_DIR}/include/avnd/binding/gstreamer/element.hpp"
)
4 changes: 2 additions & 2 deletions examples/Helpers/PerBus.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@ struct PerBusAsArgs
struct PerBusAsPortsFixed
{
halp_meta(name, "Per-bus processing (fixed ports, helpers)")
halp_meta(c_name, "avnd_helpers_per_bus_as_args")
halp_meta(c_name, "avnd_helpers_per_bus_as_ports_fixed")
halp_meta(uuid, "0dd7b1df-7c84-49e9-8427-0532a87bccbe")

struct
Expand Down Expand Up @@ -69,7 +69,7 @@ struct PerBusAsPortsFixed
struct PerBusAsPortsDynamic
{
halp_meta(name, "Per-bus processing (dynamic ports, helpers)")
halp_meta(c_name, "avnd_helpers_per_bus_as_args")
halp_meta(c_name, "avnd_helpers_per_bus_as_ports_dynamic")
halp_meta(uuid, "119d7020-6b7b-4dc9-af7d-ecfb23c5994d")

struct
Expand Down
41 changes: 41 additions & 0 deletions include/avnd/binding/gstreamer/configuration.hpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
#pragma once
#include <fmt/format.h>
namespace gst
{
struct logger
{
template <typename... T>
static void log(fmt::format_string<T...> fmt, T&&... args)
{
}

template <typename... T>
static void error(fmt::format_string<T...> fmt, T&&... args)
{
}
template <typename... T>
static void trace(fmt::format_string<T...> fmt, T&&... args) noexcept
{
}
template <typename... T>
static void debug(fmt::format_string<T...> fmt, T&&... args) noexcept
{
}
template <typename... T>
static void info(fmt::format_string<T...> fmt, T&&... args) noexcept
{
}
template <typename... T>
static void warn(fmt::format_string<T...> fmt, T&&... args) noexcept
{
}
template <typename... T>
static void critical(fmt::format_string<T...> fmt, T&&... args) noexcept
{
}
};
struct config
{
using logger_type = gst::logger;
};
}
Loading

0 comments on commit ef25590

Please sign in to comment.