[vlmc-devel] [PATCH] Add and integrate libvlc producer/consumer submodule
Pawel Golinski
golpaw1 at gmail.com
Mon Jul 25 14:20:49 CEST 2016
---
.gitmodules | 3 +++
src/Backend/MLT/MLTBackend.cpp | 15 +++++++++++++++
src/Backend/MLT/MLTOutput.cpp | 10 ++++++++--
src/Backend/MLT/MLTOutput.h | 2 +-
src/Backend/libvlc-mlt | 1 +
src/CMakeLists.txt | 4 ++++
6 files changed, 32 insertions(+), 3 deletions(-)
create mode 160000 src/Backend/libvlc-mlt
diff --git a/.gitmodules b/.gitmodules
index e69de29..ed28514 100644
--- a/.gitmodules
+++ b/.gitmodules
@@ -0,0 +1,3 @@
+[submodule "src/Backend/libvlc-mlt"]
+ path = src/Backend/libvlc-mlt
+ url = https://github.com/qiubit/libvlc-mlt.git
diff --git a/src/Backend/MLT/MLTBackend.cpp b/src/Backend/MLT/MLTBackend.cpp
index 3d39930..7eb4202 100644
--- a/src/Backend/MLT/MLTBackend.cpp
+++ b/src/Backend/MLT/MLTBackend.cpp
@@ -43,6 +43,15 @@ using namespace Backend::MLT;
static Backend::IBackend::LogHandler staticLogHandler;
static std::mutex logMutex;
+extern "C" mlt_consumer consumer_libvlc_init( mlt_profile profile, mlt_service_type type, const char *id, const void *arg );
+
+static mlt_properties metadata( mlt_service_type type, const char *id, void *data )
+{
+ char file[ 4096 ];
+ snprintf( file, 4096, "%s%s", LIBVLC_MLT_MODULES_PATH, (char*)data );
+ return mlt_properties_parse_yaml( file );
+}
+
IBackend*
Backend::instance()
{
@@ -54,6 +63,12 @@ MLTBackend::MLTBackend()
m_mltRepo = Mlt::Factory::init();
m_profile.setFrameRate( 2997, 100 );
+ m_mltRepo->register_service( consumer_type, "libvlc", (mlt_register_callback)consumer_libvlc_init );
+ m_mltRepo->register_service( consumer_type, "libvlc_window", (mlt_register_callback)consumer_libvlc_init );
+ m_mltRepo->register_metadata( consumer_type, "libvlc", metadata, (void*)"/libvlc/consumer_libvlc.yml" );
+ m_mltRepo->register_metadata( consumer_type, "libvlc_window", metadata, (void*)"/libvlc/consumer_libvlc_window.yml" );
+
+
for ( int i = 0; i < m_mltRepo->filters()->count(); ++i )
{
auto pro = std::unique_ptr<Mlt::Properties>( m_mltRepo->metadata( filter_type, m_mltRepo->filters()->get_name( i ) ) );
diff --git a/src/Backend/MLT/MLTOutput.cpp b/src/Backend/MLT/MLTOutput.cpp
index c99e850..6626a52 100644
--- a/src/Backend/MLT/MLTOutput.cpp
+++ b/src/Backend/MLT/MLTOutput.cpp
@@ -31,10 +31,12 @@
#include <cassert>
+#include <stdio.h>
+
using namespace Backend::MLT;
MLTOutput::MLTOutput()
- : MLTOutput( Backend::instance()->profile(), "sdl" )
+ : MLTOutput( Backend::instance()->profile(), "libvlc_window" )
{
}
@@ -159,7 +161,11 @@ MLTOutput::isConnected() const
void
MLTSdlOutput::setWindowId( intptr_t id )
{
- consumer()->set( "window_id", std::to_string( id ).c_str() );
+ consumer()->set( "output_dst", (void *)id, 0 );
+ // TODO: Only Qt knows, which window type it spawns,
+ // so this function should take window id AS WELL AS
+ // window_type. Workaround - set window_type manually here.
+ consumer()->set( "window_type", "nsobject" );
}
void
diff --git a/src/Backend/MLT/MLTOutput.h b/src/Backend/MLT/MLTOutput.h
index 79dcd9e..c0e9188 100644
--- a/src/Backend/MLT/MLTOutput.h
+++ b/src/Backend/MLT/MLTOutput.h
@@ -81,7 +81,7 @@ class MLTSdlOutput : public MLTOutput
{
public:
MLTSdlOutput()
- : MLTOutput( Backend::instance()->profile(), "sdl" ) { }
+ : MLTOutput( Backend::instance()->profile(), "libvlc_window" ) { }
void setWindowId( intptr_t id );
};
diff --git a/src/Backend/libvlc-mlt b/src/Backend/libvlc-mlt
new file mode 160000
index 0000000..e13e8a0
--- /dev/null
+++ b/src/Backend/libvlc-mlt
@@ -0,0 +1 @@
+Subproject commit e13e8a017f78e22b84c8db27598541b8dba27b2e
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index a85cf0a..48c4508 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -55,8 +55,12 @@ INCLUDE_DIRECTORIES(${FREI0R_INCLUDE_DIR})
# Instruct CMake to run moc automatically when needed.
SET(CMAKE_AUTOMOC ON)
+SET(LIBVLC_MLT_MODULES Backend/libvlc-mlt)
+ADD_DEFINITIONS(-DLIBVLC_MLT_MODULES_PATH="${CMAKE_CURRENT_BINARY_DIR}/src/${LIBVLC_MLT_MODULES}")
+
SET(VLMC_SRCS
Commands/Commands.cpp
+ Backend/libvlc-mlt/consumer_libvlc.c
Backend/IBackend.h
Backend/IOutput.h
Backend/IInput.h
--
2.7.4 (Apple Git-66)
More information about the Vlmc-devel
mailing list