Compare commits

...

2 Commits

Author SHA1 Message Date
Benjamin Otte
0087a6c66a media: Block loading of the old modules
When media modules from previous versions still exist that conflict with
the now built-in modules, block loading them.

Determining the module name was done with the best way I could come up
with, because apparently g_io_module_scope_block() requires the full
library name.
2021-08-10 23:59:05 +02:00
Benjamin Otte
bd7ad38b40 media: Don't build media modules as modules
Instead, include them in libgtk.
2021-08-10 23:59:05 +02:00
8 changed files with 47 additions and 82 deletions

View File

@@ -26,6 +26,13 @@
#include "gtkmodulesprivate.h"
#include "gtknomediafileprivate.h"
#ifdef HAVE_FFMPEG
#include "modules/media/gtkffmediafileprivate.h"
#endif
#ifdef HAVE_GSTREAMER
#include "modules/media/gtkgstmediafileprivate.h"
#endif
/**
* GtkMediaFile:
*
@@ -605,6 +612,15 @@ gtk_media_file_get_input_stream (GtkMediaFile *self)
return priv->input_stream;
}
/* stolen from the glib testsuite */
#ifdef _MSC_VER
# define MODULE_PREFIX ""
#else
# define MODULE_PREFIX "lib"
#endif
#define MODULE_NAME(name) (MODULE_PREFIX name "." G_MODULE_SUFFIX)
void
gtk_media_file_extension_init (void)
{
@@ -623,6 +639,21 @@ gtk_media_file_extension_init (void)
scope = g_io_module_scope_new (G_IO_MODULE_SCOPE_BLOCK_DUPLICATES);
#ifdef HAVE_FFMPEG
g_io_extension_point_implement (GTK_MEDIA_FILE_EXTENSION_POINT_NAME,
GTK_TYPE_FF_MEDIA_FILE,
"ffmpeg",
0);
g_io_module_scope_block (scope, MODULE_NAME ("media-ffmpeg"));
#endif
#ifdef HAVE_GSTREAMER
g_io_extension_point_implement (GTK_MEDIA_FILE_EXTENSION_POINT_NAME,
GTK_TYPE_GST_MEDIA_FILE,
"gstreamer",
10);
g_io_module_scope_block (scope, MODULE_NAME ("media-gstreamer"));
#endif
paths = _gtk_get_module_path ("media");
for (i = 0; paths[i]; i++)
{

View File

@@ -1114,7 +1114,7 @@ libgtk_static = static_library('gtk',
c_args: gtk_cargs + common_cflags,
include_directories: [confinc, gdkinc, gskinc, gtkinc],
dependencies: gtk_deps + [libgtk_css_dep, libgdk_dep, libgsk_dep],
link_with: [libgtk_css, libgdk, libgsk ],
link_with: [libgtk_css, libgdk, libgsk ] + media_modules
)
# `link_whole:` is actually only supported on Visual Studio 2015 Update 2
@@ -1126,7 +1126,7 @@ whole_archives = []
gtk4_objs = []
if cc.get_id() == 'msvc' and cc.version().split('.').get(0) < '19'
foreach target : [ libgtk_static, libgtk_css, libgdk, libgdk_win32, libgsk, libgsk_f16c ]
foreach target : [ libgtk_static, libgtk_css, libgdk, libgdk_win32, libgsk, libgsk_f16c, media_ffmpeg, media_gstreamer ]
gtk4_objs += target.extract_all_objects(recursive: false)
endforeach
else

View File

@@ -732,6 +732,7 @@ project_build_root = meson.current_build_dir()
subdir('gtk/css')
subdir('gdk')
subdir('gsk')
subdir('modules/media')
subdir('gtk')
subdir('modules')
if get_option('demos')

View File

@@ -171,42 +171,6 @@ G_DEFINE_TYPE_EXTENDED (GtkFfMediaFile, gtk_ff_media_file, GTK_TYPE_MEDIA_FILE,
G_IMPLEMENT_INTERFACE (GDK_TYPE_PAINTABLE,
gtk_ff_media_file_paintable_init))
G_MODULE_EXPORT
void
g_io_module_load (GIOModule *module)
{
g_type_module_use (G_TYPE_MODULE (module));
#if LIBAVCODEC_VERSION_INT < AV_VERSION_INT (58, 9, 100)
av_register_all ();
#endif
g_io_extension_point_implement (GTK_MEDIA_FILE_EXTENSION_POINT_NAME,
GTK_TYPE_FF_MEDIA_FILE,
"ffmpeg",
0);
}
G_MODULE_EXPORT
G_GNUC_NORETURN
void
g_io_module_unload (GIOModule *module)
{
g_assert_not_reached ();
}
G_MODULE_EXPORT
char **
g_io_module_query (void)
{
char *eps[] = {
(char *) GTK_MEDIA_FILE_EXTENSION_POINT_NAME,
NULL
};
return g_strdupv (eps);
}
static void
gtk_ff_media_file_set_ffmpeg_error (GtkFfMediaFile *video,
int av_errnum)
@@ -762,6 +726,10 @@ gtk_ff_media_file_class_init (GtkFfMediaFileClass *klass)
stream_class->seek = gtk_ff_media_file_seek;
gobject_class->dispose = gtk_ff_media_file_dispose;
#if LIBAVCODEC_VERSION_INT < AV_VERSION_INT (58, 9, 100)
av_register_all ();
#endif
}
static void

View File

@@ -97,35 +97,6 @@ G_DEFINE_TYPE_EXTENDED (GtkGstMediaFile, gtk_gst_media_file, GTK_TYPE_MEDIA_FILE
G_IMPLEMENT_INTERFACE (GDK_TYPE_PAINTABLE,
gtk_gst_media_file_paintable_init))
void
g_io_module_load (GIOModule *module)
{
g_type_module_use (G_TYPE_MODULE (module));
g_io_extension_point_implement (GTK_MEDIA_FILE_EXTENSION_POINT_NAME,
GTK_TYPE_GST_MEDIA_FILE,
"gstreamer",
10);
}
G_GNUC_NORETURN
void
g_io_module_unload (GIOModule *module)
{
g_assert_not_reached ();
}
char **
g_io_module_query (void)
{
char *eps[] = {
(char *) GTK_MEDIA_FILE_EXTENSION_POINT_NAME,
NULL
};
return g_strdupv (eps);
}
static void
gtk_gst_media_file_ensure_prepared (GtkGstMediaFile *self)
{

View File

@@ -22,7 +22,7 @@
#include "gtkgstpaintableprivate.h"
#include "gtkgstsinkprivate.h"
#include <gtk/gtk.h>
#include <gdk/gdk.h>
#include <gst/player/gstplayer-video-renderer.h>
#include <gsk/gl/gskglrenderer.h>

View File

@@ -1,6 +1,5 @@
media_subdir = 'gtk-4.0/@0@/media'.format(gtk_binary_version)
media_install_dir = join_paths(get_option('libdir'), media_subdir)
media_backends = []
media_modules = []
extra_c_args = [
'-DGTK_COMPILATION',
@@ -31,13 +30,11 @@ endforeach
if ffmpeg_found
media_backends += 'ffmpeg'
cdata.set('HAVE_FFMPEG', 1)
shared_module('media-ffmpeg',
media_modules += static_library('media-ffmpeg',
sources: 'gtkffmediafile.c',
include_directories: [ confinc, gtkinc ],
c_args: extra_c_args,
dependencies: [ libgtk_dep, ffmpeg_deps ],
name_suffix: module_suffix,
install_dir: media_install_dir,
install: true,
dependencies: [ libgdk_dep, ffmpeg_deps ],
)
endif
@@ -64,16 +61,15 @@ if gstplayer_dep.found() and gstgl_dep.found()
media_backends += 'gstreamer'
cdata.set('HAVE_GSTREAMER', 1)
shared_module('media-gstreamer',
media_modules += static_library('media-gstreamer',
sources: [
'gtkgstmediafile.c',
'gtkgstpaintable.c',
'gtkgstsink.c',
],
include_directories: [ confinc, gtkinc ],
c_args: extra_c_args + extra_win_cflags,
dependencies: [ libm, libgtk_dep, gstplayer_dep, gstgl_dep ],
name_suffix: module_suffix,
install_dir: media_install_dir,
install: true,
dependencies: [ libm, libgdk_dep, gstplayer_dep, gstgl_dep ],
)
endif

View File

@@ -4,5 +4,3 @@ if os_unix
else
print_backends = []
endif
subdir('media')