< prev index next >
modules/javafx.media/src/main/native/gstreamer/gstreamer-lite/gstreamer/gst/gstregistry.c
Print this page
*** 155,168 ****
#if defined (GSTREAMER_LITE) && defined(LINUX)
#include <link.h>
#include <dlfcn.h>
! static const int AVCODEC_EXPLICIT_VERSIONS[] = { 53, 54, 55, 56 };
static const int AVCODEC_FFMPEG_EXPLICIT_VERSIONS[] = { 56 };
!
! typedef unsigned (*avcodec_version_proto)();
/*
* Callback passed to dl_iterate_phdr(): finds the path of
* LIBGSTREAMER_LIB_NAME and returns it in data which is actually
* a char**.
--- 155,170 ----
#if defined (GSTREAMER_LITE) && defined(LINUX)
#include <link.h>
#include <dlfcn.h>
! // For libav (libavcodec.so)
! static const int AVCODEC_LIBAV_EXPLICIT_VERSIONS[] = { 53, 54, 55, 56 };
! // For ffmpeg (libavcodec-ffmpeg.so)
static const int AVCODEC_FFMPEG_EXPLICIT_VERSIONS[] = { 56 };
! // For libav or ffmpeg (libavcodec.so)
! static const int AVCODEC_EXPLICIT_VERSIONS[] = { 57 };
/*
* Callback passed to dl_iterate_phdr(): finds the path of
* LIBGSTREAMER_LIB_NAME and returns it in data which is actually
* a char**.
*** 1366,1431 ****
g_free (filename);
continue;
}
#else // GSTREAMER_LITE
! for (gstlite_plugins_list_index = 0; gstlite_plugins_list[gstlite_plugins_list_index] != NULL; gstlite_plugins_list_index++)
! {
filename_partial = g_build_filename (path, gstlite_plugins_list[gstlite_plugins_list_index], NULL);
#ifdef LINUX
! if (g_str_has_suffix(filename_partial, "libavplugin")) // Check libav version and load correspondent module.
! {
int vi = (sizeof(AVCODEC_EXPLICIT_VERSIONS)/sizeof(AVCODEC_EXPLICIT_VERSIONS[0]));
!
! while(!avcHandle && --vi >= 0)
! {
int version = AVCODEC_EXPLICIT_VERSIONS[vi];
gchar* libname = g_strdup_printf("libavcodec.so.%d", version);
avcHandle = dlopen(libname, RTLD_NOW);
g_free(libname);
}
! // Look for libavcodec-ffmpeg if libavcodec is not available
! if (avcHandle == NULL)
! {
vi = (sizeof(AVCODEC_FFMPEG_EXPLICIT_VERSIONS)/sizeof(AVCODEC_FFMPEG_EXPLICIT_VERSIONS[0]));
! while(!avcHandle && --vi >= 0)
! {
int version = AVCODEC_FFMPEG_EXPLICIT_VERSIONS[vi];
gchar* libname = g_strdup_printf("libavcodec-ffmpeg.so.%d", version);
avcHandle = dlopen(libname, RTLD_NOW);
g_free(libname);
}
! if (avcHandle)
isAVCFFMPEG = TRUE;
}
! if (avcHandle)
! {
dlclose(avcHandle);
avcHandle = NULL;
// Try simple name first. OpenJDK build may contain the latest bits.
filename = g_strdup_printf("%s%s", filename_partial, GST_EXTRA_MODULE_SUFFIX);
! if (g_stat (filename, &file_status) < 0) // Not available, create a versioned filename
! {
g_free(filename);
if (isAVCFFMPEG)
! filename = g_strdup_printf("%s-ffmpeg-%d%s", filename_partial, AVCODEC_FFMPEG_EXPLICIT_VERSIONS[vi], GST_EXTRA_MODULE_SUFFIX);
else
! filename = g_strdup_printf("%s-%d%s", filename_partial, AVCODEC_EXPLICIT_VERSIONS[vi], GST_EXTRA_MODULE_SUFFIX);
}
! }
! else
! {
g_free(filename_partial);
continue; // No libavcodec.so installed.
}
! }
! else
filename = g_strconcat(filename_partial, GST_EXTRA_MODULE_SUFFIX, NULL);
#else
filename = g_strconcat(filename_partial, GST_EXTRA_MODULE_SUFFIX, NULL);
#endif
g_free(filename_partial);
--- 1368,1459 ----
g_free (filename);
continue;
}
#else // GSTREAMER_LITE
! for (gstlite_plugins_list_index = 0; gstlite_plugins_list[gstlite_plugins_list_index] != NULL; gstlite_plugins_list_index++) {
filename_partial = g_build_filename (path, gstlite_plugins_list[gstlite_plugins_list_index], NULL);
#ifdef LINUX
! if (g_str_has_suffix(filename_partial, "libavplugin")) { // Check libav version and load correspondent module.
! int plugin_version = 0;
! // Look for libavcodec and check its version to figure out if it is
! // libav or ffmpeg. Starting from 57 and up
int vi = (sizeof(AVCODEC_EXPLICIT_VERSIONS)/sizeof(AVCODEC_EXPLICIT_VERSIONS[0]));
! while(!avcHandle && --vi >= 0) {
int version = AVCODEC_EXPLICIT_VERSIONS[vi];
gchar* libname = g_strdup_printf("libavcodec.so.%d", version);
avcHandle = dlopen(libname, RTLD_NOW);
g_free(libname);
}
! // Check if it is libav or ffmpeg
! if (avcHandle) {
! unsigned int (*av_version)(void);
! av_version = dlsym(avcHandle, "avcodec_version");
! if (av_version != NULL) {
! unsigned int version = (*av_version)();
! unsigned int micro = version & 0xFF;
! if (micro >= 100)
! isAVCFFMPEG = TRUE;
! plugin_version = AVCODEC_EXPLICIT_VERSIONS[vi];
! } else { // Something wrong
! dlclose(avcHandle);
! avcHandle = NULL;
! }
! }
!
! // Look for libavcodec-ffmpeg. For 56 only
! if (avcHandle == NULL) {
vi = (sizeof(AVCODEC_FFMPEG_EXPLICIT_VERSIONS)/sizeof(AVCODEC_FFMPEG_EXPLICIT_VERSIONS[0]));
! while(!avcHandle && --vi >= 0) {
int version = AVCODEC_FFMPEG_EXPLICIT_VERSIONS[vi];
gchar* libname = g_strdup_printf("libavcodec-ffmpeg.so.%d", version);
avcHandle = dlopen(libname, RTLD_NOW);
g_free(libname);
}
! if (avcHandle) {
! plugin_version = AVCODEC_FFMPEG_EXPLICIT_VERSIONS[vi];
isAVCFFMPEG = TRUE;
}
+ }
! // Looks for libav 56 and below
! if (avcHandle == NULL) {
! vi = (sizeof(AVCODEC_LIBAV_EXPLICIT_VERSIONS)/sizeof(AVCODEC_LIBAV_EXPLICIT_VERSIONS[0]));
! while(!avcHandle && --vi >= 0) {
! int version = AVCODEC_LIBAV_EXPLICIT_VERSIONS[vi];
! gchar* libname = g_strdup_printf("libavcodec.so.%d", version);
! avcHandle = dlopen(libname, RTLD_NOW);
! g_free(libname);
! }
!
! if (avcHandle) {
! plugin_version = AVCODEC_LIBAV_EXPLICIT_VERSIONS[vi];
! }
! }
!
! if (avcHandle) {
dlclose(avcHandle);
avcHandle = NULL;
// Try simple name first. OpenJDK build may contain the latest bits.
filename = g_strdup_printf("%s%s", filename_partial, GST_EXTRA_MODULE_SUFFIX);
! if (g_stat (filename, &file_status) < 0) { // Not available, create a versioned filename
g_free(filename);
if (isAVCFFMPEG)
! filename = g_strdup_printf("%s-ffmpeg-%d%s", filename_partial, plugin_version, GST_EXTRA_MODULE_SUFFIX);
else
! filename = g_strdup_printf("%s-%d%s", filename_partial, plugin_version, GST_EXTRA_MODULE_SUFFIX);
}
! } else {
g_free(filename_partial);
continue; // No libavcodec.so installed.
}
! } else {
filename = g_strconcat(filename_partial, GST_EXTRA_MODULE_SUFFIX, NULL);
+ }
#else
filename = g_strconcat(filename_partial, GST_EXTRA_MODULE_SUFFIX, NULL);
#endif
g_free(filename_partial);
< prev index next >