diff --git a/CMakeLists.txt b/CMakeLists.txt index 5566da4..4e08946 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -109,6 +109,7 @@ SET(obs-stream-effects_HEADERS "${PROJECT_SOURCE_DIR}/source/gs-texture.h" "${PROJECT_SOURCE_DIR}/source/gs-vertex.h" "${PROJECT_SOURCE_DIR}/source/gs-vertexbuffer.h" + "${PROJECT_SOURCE_DIR}/source/obs-audio-capture.h" "${PROJECT_BINARY_DIR}/source/version.h" "${PROJECT_SOURCE_DIR}/source/strings.h" "${PROJECT_SOURCE_DIR}/source/util-math.h" @@ -133,6 +134,7 @@ SET(obs-stream-effects_SOURCES "${PROJECT_SOURCE_DIR}/source/gs-texture.cpp" "${PROJECT_SOURCE_DIR}/source/gs-vertex.cpp" "${PROJECT_SOURCE_DIR}/source/gs-vertexbuffer.cpp" + "${PROJECT_SOURCE_DIR}/source/obs-audio-capture.cpp" "${PROJECT_SOURCE_DIR}/source/util-math.cpp" "${PROJECT_SOURCE_DIR}/source/util-memory.cpp" ) diff --git a/source/obs-audio-capture.cpp b/source/obs-audio-capture.cpp new file mode 100644 index 0000000..934c757 --- /dev/null +++ b/source/obs-audio-capture.cpp @@ -0,0 +1,44 @@ +/* + * Modern effects for a modern Streamer + * Copyright (C) 2018 Michael Fabian Dirks + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA + */ + +#include "obs-audio-capture.h" + +void obs::audio_capture::audio_capture_cb(void* data, obs_source_t*, const struct audio_data* audio, bool muted) { + auto self = reinterpret_cast(data); + self->cb(self->cb_data, audio, muted); +} + +obs::audio_capture::audio_capture(obs_source_t* source) { + this->source = source; + obs_source_add_audio_capture_callback(this->source, audio_capture_cb, this); +} + +obs::audio_capture::~audio_capture() { + obs_source_remove_audio_capture_callback(this->source, audio_capture_cb, this); +} + +void obs::audio_capture::set_callback(audio_capture_callback_t cb, void* data) { + this->cb = cb; + this->cb_data = data; +} + +void obs::audio_capture::set_callback(audio_capture_callback_t cb) { + this->cb = cb; + this->cb_data = nullptr; +} diff --git a/source/obs-audio-capture.h b/source/obs-audio-capture.h new file mode 100644 index 0000000..9a8713b --- /dev/null +++ b/source/obs-audio-capture.h @@ -0,0 +1,41 @@ +/* + * Modern effects for a modern Streamer + * Copyright (C) 2018 Michael Fabian Dirks + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA + */ + +#pragma once +#include +#include + +namespace obs { + typedef std::function audio_capture_callback_t; + + class audio_capture { + obs_source_t* source; + audio_capture_callback_t cb; + void* cb_data; + + static void audio_capture_cb(void*, obs_source_t*, struct audio_data const *, bool); + + public: + audio_capture(obs_source_t* source); + virtual ~audio_capture(); + + void set_callback(audio_capture_callback_t cb, void* data); + void set_callback(audio_capture_callback_t cb); + }; +}