diff options
author | Reynaldo H. Verdejo Pinochet <reynaldo@osg.samsung.com> | 2015-12-02 12:27:08 -0800 |
---|---|---|
committer | Reynaldo H. Verdejo Pinochet <reynaldo@osg.samsung.com> | 2015-12-04 11:59:47 -0800 |
commit | 193b0d81d1fc85eb2d51847e90b0098e8a111988 (patch) | |
tree | 2461b3a1610193c89f5ace233196811a021a0a49 | |
parent | d9dec6893a0c66870d08bdfbee5b0ad9fcb66674 (diff) | |
download | gst-libav-193b0d81d1fc85eb2d51847e90b0098e8a111988.tar.gz |
Require libav provided by FFmpeg at run-time
Error out if system's libav* libraries are not
provided by FFmpeg. Libav-incompatible changes
were introduced to support the latter so we
can no longer support both.
https://bugzilla.gnome.org/show_bug.cgi?id=758183
-rw-r--r-- | ext/libav/gstav.c | 25 |
1 files changed, 24 insertions, 1 deletions
diff --git a/ext/libav/gstav.c b/ext/libav/gstav.c index 1c2e482..66b8bca 100644 --- a/ext/libav/gstav.c +++ b/ext/libav/gstav.c @@ -38,6 +38,23 @@ GST_DEBUG_CATEGORY (ffmpeg_debug); static GMutex gst_avcodec_mutex; +/* + * Check for FFmpeg-provided libavcodec/format + */ +static inline gboolean +gst_ffmpeg_avcodec_is_ffmpeg (void) +{ + guint av_version = avutil_version (); + + GST_DEBUG ("Using libavcodec version %d.%d.%d", + av_version >> 16, (av_version & 0x00ff00) >> 8, av_version & 0xff); + + /* FFmpeg *_MICRO versions start at 100 and Libav's at 0 */ + if ((av_version & 0xff) < 100) + return FALSE; + + return TRUE; +} int gst_ffmpeg_avcodec_open (AVCodecContext * avctx, AVCodec * codec) @@ -118,8 +135,14 @@ static gboolean plugin_init (GstPlugin * plugin) { GST_DEBUG_CATEGORY_INIT (ffmpeg_debug, "libav", 0, "libav elements"); -#ifndef GST_DISABLE_GST_DEBUG + /* Bail if not FFmpeg. We can no longer ensure operation with Libav */ + if (!gst_ffmpeg_avcodec_is_ffmpeg ()) { + GST_ERROR_OBJECT (plugin, + "Incompatible, non-FFmpeg libavcodec/format found"); + return FALSE; + } +#ifndef GST_DISABLE_GST_DEBUG av_log_set_callback (gst_ffmpeg_log_callback); #endif |